![](https://seccdn.libravatar.org/avatar/7b33cb1e776e35b87edb8ef09f0c888f.jpg?s=120&d=mm&r=g)
Hallo, Manfred Tremmel wrote:
Am Mit, 12 Jul 2000 schrieb Bernd Brodesser:
Oha, wie war das? Ich war bisher der Meinung C ist ein Teil von C++. Ist der Ansatz so verschieden?
Ja und ja. ;)
:)
Das kannst Du wohl laut sagen, die Befehle, die zur Verfügung stehen sind ja quasi die selben, bei C++ eben um objektorientierte Möglichkeiten erweitert.
Ich bin grad die Tage selber heftig am lernen (Doku bis zum abwinken, der Stroustrup haelt aber noch :) Ich habe zwar noch kaum Erfahrung, aber ich wuerde eher sagen, dass C++ die _Syntax_ von C uebernommen hat ( T* p ). Ausserdem wird eine Schnittstelle zu C angeboten (#include<cstdio> fprintf(stdout,"%s", bla);). Das hat IMHO einerseit Vorteile (formatierte Ausgabe, z,B, eine MBR in Hex) aber eben auch die Nachteile von C (Allokation). Zu dem Thema habe ich grad bei BS einen Artikel gefunden: http://www.research.att.com/~bs/new_learning.pdf IMHO kann man in gewisser Weise ein prozedurales (C, Pascal, Basic) Programm als ein einzelnes Objekt auffassen, bei dem es i.A. fuer alles und jedes eine (globale?) Prozedur (aka Member) gibt. Bis zu einem bestimmten Grad ist IMHO auch OOP aehnlich, nur dass groessere Aufgaben/Daten auf Unterobjekte delegiert werden und dass z.B. relativ viel (dann aber auch irgendwann prozedurale) Arbeit (z.B. im Konstruktor) stattfindet. Memberfunktionen bieten dann eine Schnittstelle zu den Daten. Wenn man das in die Extreme fuehrt, landet man einerseit bei einem prozeduralem Program (sozusagen "class main() { }" kapselt alles und wird beim Aufruf durchs System erzeugt) bis dahin, das alles (un-)moegliche in eine eingene Klasse/Objekt gekapselt wird, bis irgendwann nur noch in den Konstruktoren und Destruktoren etwas "bearbeitet" wird. ;)) Der Vorteil bei OOP ist IMHO dass Daten und Methoden auf diesen Daten als eine Einheit aufgefasst und ueber eine (einfache) Schnittstelle dargestellt werden. Dazu kommt natuerlich, dass die "Implementierung" verborgen werden kann. Was interessiert's mich ob eine Name-Wert Tabelle als Feld, Binaerbaum, oder sonst wie gespeichert wird? Ich brauche nur das "Objekt" 'Tabelle' und gewisse Methoden (Ein- und Ausgabe, suchen, vergleichen, sortieren, etc.) Was dahintersteckt, und wie und wann dafuer Speicher belegt wird, juckt mich als Anwender eine Objektes nicht. Das ist IMHO der eigetliche Ansatz und Vorteil von OOP. Prozedural landet man sehr schnell bei globalen Variablen, bei denen man sich um all die Details selber kuemmern muss. Hmm. Grad faellt mir ein netter Vergleich ein: Ein Computer ;) Man stelle sich mal vor, man muesste jeden Dateizugriff, jede Eingabe von der Tastatur oder Maus, jede Ausgabe (Bildschirm, Datei) selbst behandeln... *oerks* [Taste "Puffer fuer Tastatureingabe anfordern" - Groesse angeben Hups, war zu klein - Mist. Muss neu booten.] vs. [Ich tipp mal drauf los, das "Objekt" Tastatur-Treiber wird sich um den Kleinkram wie Speicher anfordern, puffern usw. schon kuemmern und mich ggfs. auf Probleme ('s wird eng) aufmerksam machen]. Ein nett gekapseltes Objekt "Tastatur" ist doch prima ;) Ubertreibt man es aber (fuer jede Taste und jede Aktion _dieser_ einen Taste ein Objekt)? *schauder* ;)
Der Denkansatz ist aber vollkommen verschieden. Ich hab damals C in zwei Wochen gelernt (mit den nötigen Bibliotheken, die für einfache Programme auf dem Amiga für einfache grafische Software nötig war) danach C++ in zwei Jahren. Der Umstieg innerhalb einer Programmier- sprache mit dem selben Ansatz ist nicht viel mehr, wie Vokabeln pauken (hab vor C fast alles prozedurale programmiert: verschiedene Basic-Varianten, E, Pascal, PL/I, Cobol, Rexx, ...).
Ack. Natuerlich kann man in C/Basic OO-programmieren, aber dazu sind eben Verrenkungen noetig. (typedef struct _class_Bla Bla samt Funktions- zeigern ;)... IMHO sollte man versuchen sich eine passende Sprache herauszu- greifen. Ein kleines Script mit der shell+sed oder Perl-script hat man viel schneller beisammen als ein entsprechendes C oder C++ Proggie... Die Programmiersprachen bieten eben unterschiedliche geeignete Hilfsmittel an (z.B. C++ den Templatemechanismus).
Das Umdenken zwischen verschiedene Programmieransätzen dagegen ist sehr schwierig, ich würd deshalb jedem raten, heute gleich Objekt- orientiert einzusteigen.
ACK. Zur Not stelle man sich als OOler einfach vor, das ganze Proggie ist _ein_ Objekt (s.o.) ;)
Das ist wie mit dem goto, das es bekantlich unter C auch gibt. Wenn da ein Basic-Mensch (Kein Visual Basic, sondern altes Standard-Basic mit Spagethi-Code) mit arbeitet ist das am Ende kein C-Programm sondern ein verkapptes Basic, obwohl es C ist.
Hey, meine Meinung. Das fehlen von goto macht IMHO Java so symphatisch.
Und wird doch oft mit anderen Mitteln, wenn wohl auch "sauberer" emuliert... "switch 'X' ... case 'Y'; funktion; break;" vs. "if 'X'='Y' goto funktion; else(if)..." Das duerfe auf Maschinencode-ebene sogar mehr oder weniger auf das gleich hinauslaufen. Aber genau bei sowas kommt IMHO ein Vorteil von OO zum Tragen. Diese wilden Spruenge quer durch Programm werden verhindert... Objekt/Daten/Methoden sind (immer?) eine (Art von) Einheit.
Genauso oder noch schlimmer ist es mit C++. Ein C Mensch versucht immer wieder prozudural zu denken. Und nicht Objektorientiert.
ACK. CU David -- Why use windows, when there's a door? email: David@dhaller.de www: http://www.dhaller.de --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com