03.03.01 11:07:31, Bernd Brodesser
* Tobias Wilken schrieb am 03.Mär.2001:
Nach eueren Mails kaemen eigentlich nur noch drei Programmiersprache die zur Auswahl stehen. Assembler, C und C++. Kann mir irgendjemand den Unterschied zwischen C und C++ sagen. Was Assembler ist weiss ich bzw kann ich mir vorstellen.
Assembler ist selbstverständlich extrem Maschienenabhängig. Es gibt nicht Assembler, sondern Assembler für Pentium, für Motorola, ...
Assembler würde ich nun wirklich nicht wählen, wenn es mir darum geht, eine Programmiersprache zu erlernen, mit der ich hin und wieder mal ein Programm schreiben kann bzw. irgendwann gegebenenfalls auch mal ein größeres Projekt vorhabe. Assembler ist für die meisten Anwendungen zu kompliziert und unübersichtlich. Wie einige meiner Vorredner schon gesagt haben: Assembler ist gut für System- programmierung bzw. bei Geschwindigkeitsoptimierung und ich für meinen Teil wende Assembler nur dann an, wenn ich eben solche Dinge programmieren muß/möchte und auch dann bietet es sich an, einen Treiber o.ä. auf C basieren zu lassen, während nur einzelne kritische Funktionen in Assembler programmiert werden, die dann aus dem C Code heraus aufgerufen werden. Ein komplettes Programm in Assembler zu schreiben grenzt nahezu an Wahnsinn (ok ok... bei nem Treiber ggf. durchaus ok...), da man nachher kaum mehr durch seinen eigenen Code durchsteigt. Ich z.b. habe mir vor ein paar Tagen aus sentimentalen ;) Gründen noch ein mal ein altes Assemblerprogramm angeschaut, das ich vor ca. 7 Jahren damals noch auf dem guten alten Amiga programmiert hatte und da braucht man schon ganz schön lang, um sich wieder zurechtzufinden, selbst wenn man es kommentiert hatte. Will man z.b nur einen Text ausgeben lassen, benötigt man in höheren Sprachen lediglich eine Zeile, in der man sogar schon Formatierungen vornehmen kann, während man in Assembler so an die 4 oder 5 Zeilen braucht, um nur einen Text ausgeben zu lassen... ganz zu Schweigen von irgendwelchem Schnickschnack wie Formatierungen, die man gerne vornehmen möchte. Weiterhin ist Assembler maschinenabhängig, wie schon erwähnt... also denkbar schlecht für Portierungen auf andere Systeme
Ist C und C++ mit Pascal und Delphi vergleichen?
Vergleichen kannst Du alles mögliche. C und Pascal sind recht ähnlich. Wieso fragst Du? Kannst Du schon Pascal? Pascal ist bei Linux auch mit bei. Wenn nicht, würde ich empfehlen, daß Du C oder C++ lernst. C ist die reinere der beiden Sprachen. Sie ist eine Prozedurale Sprache, während C++ eine Objektorientierte Sprache ist, die aber auf C aufbaut, und somit eine Reihe von prozeduralen Teilen mit übernimmt. Sehr ähnlich zu C++ ist übrigens Java.
C++ und Turbo Pascal sind vom Prinzip sehr ähnlich wie ich finde. Die groben Strukturen und Funktionsweisen ähneln sich sehr, nur die Syntax ist anders, wobei ich sagen würde, daß da (Turbo) Pascal für den Anfänger geeigneter ist, da dort die Schlüsselwörter meist intuitiv ihre Wirkung/Funktion umschreiben. C(++) benutzt an vielen Stellen lediglich einfache Symbole, die auf einen Anfänger wahrscheinlich noch viel kryptischer wirken, als sie eigentlich sind. Das ist natürlich mit mehr Lernaufwand verbunden, die Bedeutung dieser Zeichen zu behalten... ist zwar kein Riesenproblem, aber ich denke, daß da (Turbo) Pascal dem Anfänger eher entgegenkommt als C(++). C++ und Turbo Pascal (auch Delphi) sind beide objektorientiert, man kann aber auch prozedural programmieren. Das setzt bei größeren Vorhaben doch einiges an Selbstdisziplin und vorheriger Planung des Projektes voraus ;) , damit man nicht schließlich ein großes Chaos vorfindet, das dann aus einem einzigen Wirrwarr besteht... Im großen und ganzen würde ich es (ganz besonders für etwaige größere Projekte) empfehlen, sich eine objektorientierte Sprache zu eigen zu machen, da diese Objekte eine klare Struktur schaffen. Die Objekte bzw Klassen dieser Programmierart sind klar voneinander getrennt und so kann man sehr gut den Überblick behalten, selbst wenn man ein umfangreiches Projekt entwickelt hat. Ein weiterer Vorteil der OOP ist es, daß Programme leicht zu warten oder nachträglich zu verändern sind. Genau das ist der Punkt der Objekte. Ich will das hier mal kurz versuchen zu erläutern. Schreibt man z.b. ein Objekt, welches (jaja, dummes Beispiel, aber einfach) dazu da ist, zwei Zahlen zu addieren, so kann man zunächst das so realisiert haben, daß man nur Integerzahlen dort aufnehmen bzw addieren kann. Hat man dies nun vernünftig realisiert, so wird die Benutzung dieses Objekts so vonstatten gehen, daß man Funktionen aufruft, anstatt auf die Variablen des Objekts direkt von außen zuzugreifen. Fällt einem später auf, daß man doch auch Realzahlen mit in diese Klasse einbeziehen möchte, dann kann man die Klasse intern verändern, aber die alten Funktionen beibehalten und der Klasse neue Funktionen für diese neuen Kommazahlen mit auf den Weg geben. Das erhält die Kompatibilität, aber läßt einem auch die Option, Neues hinzuzufügen. Der nächste wichtige Punkt ist, daß man die einmal erstellten Objekte/Klassen wieder- verwenden kann in späteren Projekten, da sie ja eine Einheit für sich sind. In C++ muß man halt dann einfach die Header Datei in das neue Projekt einbinden und schon hat man die einmal programmierte Funktionalität wieder zur Verfügung, ohne sich nochmal mit der internen Problematik auseinandersetzen zu müssen. Beispiele dafür gibt es wie Sand am Meer; ich z.b. habe eine Klasse geschrieben, die es besonders benutzerfreundlich macht, mit TCP/IP-Verbindungen umzugehen, ohne daß ich mich jedesmal mit den Internas beschäftigen müßte. Ich erstelle einfach ein Objekt und rufe ein, zwei Methoden (=Funktionen) dieses Objektes auf und schon hab ich eine TCP/IP Verbindung und kann senden und empfangen und weiß der Kuckuck was...
Eine reine Objektorientierte Sprache ist Eifel, kennt aber kaum einer, ist aber auch mit auf der SuSE-CD.
Java ist übrigens auch rein objektorientiert und wirklich sehr ähnlich zu C++ Ich denke, daß OOP das Maß der Dinge ist, wenn man ernsthaft programmieren möchte. Für kleine Projekte und kleine Tools wird man aber wahrscheinlich nicht extra irgendwelche Klassen/Objekte konstruieren, sondern prozedural vorgehen, da das weniger Vorausplanung erfordert und schneller geht. Assembler: Für Treiber usw... s.o. ;) Zum Lernen würde ich also Turbo Pascal bzw. Delphi empfehlen, da man so erstmal die teilweise kryptische Syntax von C++ umgehen kann, welche einem mit zunehmender Erfahrung aber immer angenehmer werden wird, da man in C(++) weniger tippen muß als in (Turbo) Pascal ;) Java ist auch einen Blick wert, zumal man da noch von Borland/Inprise den J Builder umsonst bekommt, der ein hervorragendes Entwicklungstool ist... und den es sowohl für Windows als auch für Linux gibt. Nur kann man dort allerdings nicht prozedural programmieren und wird sofort und mit voller Konsequenz in das objektorientierte Konzept geschmissen... Vorteil von Java: Selbst das kompilierte Programm wird maschinenunabhängig sein, da es in einen sog. Bytecode kompiliert wird, der von der Java Engine ausgeführt werden kann, die es unter jedem Betreibssystem gibt. c u all Oliver