Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Nimral
Beiträge: 388
Registriert: Mi 10. Jun 2015, 11:33

Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Beitrag von Nimral »

Mir geht es heute um eine Begriffsbestimmung.

In den Lehrplänen für Informatik Mittelschule fand ich mehrmals das Buzzword "Objektorientierte Programmierung". Es wird dort so verwendet, dass einfache Abläufe mit einer Scriptsprache (hier: Scratch) umgesetzt werden sollen. Die damit umgesetzte Grundlogik ist m.E. 100% imperativ/prozedural, es werden Schleifen und Entscheidungen derart zusammengesetzt, dass einfache lineare Abläufe ("bewege eine Figur um Hinernisse herum von A nach B") realisiert werden. Man hat in Scratch allerlei bunte Objekte zur Verfügung, die den Ablauf aufpeppen. Multitaslking ist ein integraler Bestandteil, und vieles läuft ereignisgesteuert.

Scratch mag intern vielleicht in einer OOP Sprache programmiert sein, aber die Logik die man damit entwirft ist es nicht, was man iun Scratch macht passt m.E. nicht auf die Definition von OOP wie wir sie verstehen.

Nun meine Fragen:

- Theoretiker vor: teilt ihr meine Ansicht wegen der m.E. falsche Anwendung des Begriffs "OOP".

- dieses Zusammenklicken von Abläufen ist eine durchaus nicht nur unter Anfängern beliebte Art, Computer oder Steuerungen zu programmieren, und ich möchte das nicht schlecht reden. Innerhalb seiner "Domain", also innerhalb einer gewissen Art von Aufgabenstellung, auf die eine solche Sprache abzielt. ist man vermutlich 100 Mal schneller unterwegs als mit einer Universalsprache. Es überhaupt nicht "programmieren" zu nennen ist m.E. unzutreffend, denn immerhin zwingt man der Maschine seinen Willen auf. Andererseits ist das nicht zu vergleichen mit Programmierung unter einer "richtigen" Programmiersprache. Gibt es einen korrekten Fachterminus für diese Art der Programmierung? Makrosprachen und Batches/Scripts fallen m.E. in die gleiche Kategorie.

HG, Armin.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 5235
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Beitrag von af0815 »

Das Marketing zu Scratch dürfte verdammt gut sein. Soviel habe ich mal gesehen. Vor lauter Marketing und Zielgruppenbedienung habe ich nichts zur eigentlichen Programmierung gefunden, aber auch nicht vertieft gesucht.

Der Begriff OOP ist natürlich weitläufig auszulegen, daher ist es schwer dem Marketing eine falsche Definition vorzuwerfen. Aus dem was ich gesehen habe, maximal eine weitläufige Auslegung.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Nimral
Beiträge: 388
Registriert: Mi 10. Jun 2015, 11:33

Re: Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Beitrag von Nimral »

Das war jetzt missverständlich von mir. Es geht keineswegs um Scratch oder das Marketing von Scratch (es ist m.W. ein freies Lernprojekt des MIT).

Es geht mir um die Deifntionen in den Lehrplänen, z.B. hier: https://www.lehrplanplus.bayern.de/fach ... ife-klasse

Siehe z.B. inf8 --> Programmieren

Der Terminus "objektorientiert" und "Programmieren" kommt auch noch in weiteren Lehrplänen (9 und 10), vor, aber keine der danach formulierten Umsetzungsanweisungen trifft "OOP" so wie wir Programmierer es auslegen. Nur irgendwie Objekte rumschubsen können alleine ist es wohl nicht, was OOP ausmacht :-)

Armin

Benutzeravatar
theo
Beiträge: 9265
Registriert: Mo 11. Sep 2006, 19:01

Re: Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Beitrag von theo »

Nur kurz, habe nicht alles gelesen.
Es gibt noch den Begriff Objektbasierte Programmierung
Keine Ahnung, ob du vielleicht das meinst.

Warf
Beiträge: 1679
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Eine Frage an die Theoretiker (Software-Design/Programmiersprachen)

Beitrag von Warf »

Frag 4 Programmierer und du hast 5 Beschreibungen von OOP.

Ein ganz einfaches beispiel, nehmen wir mal 3 Sprachen: Java, Javascript und Go, alle 3 Programmiersprachen werden als Objektorientiert beschrieben.

Java ist das klassiche "enterprise" OOP, was man so aus den meisten Lehrbüchern kennt. Klassen, interfaces, Metatypen, Vererbung, etc. Alles in Java ist eine Klasse (selbst sowas wie enums) und Klassen kommunizieren über Methoden. Klassen sind hierbei strikte typen die fest definiert sind, aber auch gleichzeitig selbst objekte die eigene (statische) methoden haben können. Polymorphismus ist auf beiden ebenen (Klasse und MetaKlasse) über Vererbung geregelt. Außerdem ist in Java Encapsulation durch Private/Protected/Public modifier sehr stark vertreten. Das ist im Grunde wie in Pascal, nur strikter (da es in Pascal auch nicht OOP strukturen gibt wie records)

Javascript ist eine prototypische Sprache, hier sind Objekte nicht von irgendwelchen strikten typen, sondern sind einfach Dynamische Objekte die eine menge an Feldern enthält, manche Funktionen andere Daten. Klassen als Objekte selbst sind auch unterstüzt aber hierbei dann praktisch "Modelle" bzw. die Namensgebenden Prototypen von denen eine Kopie erstellt wird. Polymorphismus wird erreicht indem Objekte immer dynamisch sind, und objekte sind "kompatibel" wenn sie die selben Felder haben
Beispiel:

Code: Alles auswählen

class Test1 {
  x = 0;
  y = 0;
  pi = 3.14;
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
}

let x = new Test1(32, 42);
Ist im grunde nur syntaktischer zucker um das folgende:

Code: Alles auswählen

let Test2 = {
  "x": 0,
  "y": 0,
  "pi": 3.14,
  "new": function(x, y) {
    let result = CopyObject(Test2);
    result.x = x;
    result.y = y;
    return result;
  }
}

let x = Test2.new(32, 42);
Was im Grunde eigentlich nix anderes ist als ein Dictionairy was die namen "x", "y" und "pi" auf zahlen mappt, und der Konstruktor macht nix anderes als dieses Dictionary zu Kopieren und ein paar der werte zu verändern. Eine Funktion die jetzt z.b. "pi" verwenden würde, wäre komplett egal ob man "new Test1(...)", "Test2.new(...)" oder "Test1" oder "Test2" übergibt, da alle 4 von diesen Objekten ein feld mit dem Namen "pi" haben was eine Zahl enthält.
Hier sieht man auch gut, da jedes Objekt praktisch einfach nur ein Dictionary an Feldern ist, gibt es auch sowas wie private/protected/public felder nicht. Es gibt zwar potentiell syntaktischer Zucker der das zu teilen emuliert (vor allem in typescript), aber am Ende des Tages gibt es hier keine Festen typen und festen Kapselungen wie in Java

Das letzte Beispiel ist Go, und Go hat einfach gar keine Klassen, sondern nur structs, was im grunde equivalent zu advanced records in Pascal ist, sowie Interfaces für diese structs. Es gibt ein bisschen syntaktischen zucker wie anonyme felder für Vererbung, aber im Grunde ist vererbung hier auch nichts anderes als das es einfach ein Kindesfeld mit der "Eltern" struct gibt, und Polymorphie ist ausschließlich über Interfaces. Man findet hier also für gewöhnlich keine Tiefen Vererbungsketten, reinen Schnittstellen polymorphismus, und keine Metatypen. Und auf Kapselung in Typen wurde einfach gänzlich verzichtet, es gibt nur auf Package level private Felder, aber alles einer Struct ist einfach da.

OOP programmierung mit allen 3 Sprachen ist gänzlich unterschiedlich, dennoch ist alles 3 OOP Sprachen. Und das sind nur die Mainstream sprachen, wenn man mit sowas wie SmallTalk anfängt (was sogar die erste richtige OOP sprache war), die macht sachen nochmal komplett anders.

Ich muss gestehen, ich finde OOP ist ein bisschen zu einem bedeutungslosen Buzzword geworden, jede Sprache muss OOP sein und jeder muss OOP programmieren können, was immer das heißen mag ist dann jedem wohl selbst überlassen. Es hat wenig Sinn über OOP allgemein zu sprechen, da es mehr ein ephemerales konstrukt ist als wirklich ein konkretes paradigma. Es macht meines erachtens mehr Sinn wenn überhaupt über bestimmte Sprachen und deren Paradigmen zu reden.

Antworten