Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
objektorientierte_programmiersprachen [2012/05/09 11:49] huwaldtobjektorientierte_programmiersprachen [2019/07/22 16:18] (aktuell) – [zusätzlicher Sprachumfang von C++ (Auszug)] huwi
Zeile 1: Zeile 1:
 +====== Vorbemerkungen ======
 +Wie Eingangs schon beschrieben kann und soll dieses Tutorial kein C-Lehrbuch sein. Es ist für das Verstehen dieses Tutorials auf jeden Fall von Vorteil, wenn Kenntnisse in einer höheren Programmiersprache vorhanden sind. Am besten natürlich C. Wer über Kenntnisse einer objektorientierten Sprache wie JAVA, C++ oder C# verfügt, kann sich sofort auf den praktischen Teil stürzen. Für jeden, der über keine oder noch wenig Programmierkenntnisse verfügt, ist zu empfehlen, ein entsprechendes C/C++ Nachschlagewerk (Lehrbuch oder online Tutorial) diesem Tutorial beizustellen und jede Klammer sowie jeden Ausdruck, der in den angebotenen Quelltexten unklar ist, nachzuschlagen.
 +
 ====== Objektorientierte Programmiersprachen ====== ====== Objektorientierte Programmiersprachen ======
-Ausgangspunkt für das Verstehen einer objektorientierten Programmiersprache ist immer das objektorientierte Basiskonzept (Paradigma). Das Basiskonzept stellt sozusagen das SOLL und die konkrete Sprache das IST dar. Gehen Sie davon aus, dass eigentlich in keiner derzeit verfügbaren objektorientierten Sprache auch alle in der Theorie formulierten Konzepte bereits komplett umgesetzt sind. Man sollte sich auf jeden Fall davor hüten von den Möglichkeiten und den Einschränkungen einer konkreten Sprache auf das Konzept zu schließen. Wesentliche Aspekte objektorientierter Sprachen sollen im Folgenden anhand der Sprache C++ aufgezeigt werden. Für das Verständnis von C++ ist weiterhin wichtig zu wissen, das C++ die Sprache C beinhaltet. C++ ist die objektorientierte Erweiterung der Sprache C.+Ausgangspunkt für das Verstehen einer objektorientierten Programmiersprache ist immer das objektorientierte Basiskonzept (Paradigma). Das Basiskonzept stellt sozusagen das SOLL und die konkrete Sprache das IST dar. Gehen Sie davon aus, dass eigentlich in keiner derzeit verfügbaren objektorientierten Sprache auch alle in der Theorie formulierten Konzepte bereits komplett umgesetzt sind. Man sollte sich auf jeden Fall davor hütenvon den Möglichkeiten und den Einschränkungen einer konkreten Sprache auf das Konzept zu schließen. Wesentliche Aspekte objektorientierter Sprachen sollen im Folgenden anhand der Sprache C++ aufgezeigt werden. Für das Verständnis von C++ ist weiterhin wichtig zu wissen, das C++ die Sprache C beinhaltet. C++ ist die objektorientierte Erweiterung der Sprache C.
  
 ===== der Sprachumfang von C (Auszug) ===== ===== der Sprachumfang von C (Auszug) =====
->>><code>+><code>
 // Schlüsselworte .......................................... // Schlüsselworte ..........................................
 break double int struct break double int struct
Zeile 22: Zeile 25:
  
 ===== wesentliche C-Steuerflusskonstrukte ===== ===== wesentliche C-Steuerflusskonstrukte =====
-C folgt dem Basiskonzept der Strukturierung was nichts weiter bedeutet, als dass auf die Sprunganweisung (vgl. Assembler, GOTO, JUMP, usw.) verzichtet wird um einen Algorithmus zu erstellen. Es werden nur drei algorithmische Grundstrukturen benötigt um jede Programmlogik zu realisieren. Das sind:+C folgt dem Basiskonzept der Strukturierungwas nichts weiter bedeutet, als dass auf die Sprunganweisung (vgl. Assembler, GOTO, JUMP, usw.) verzichtet wirdum einen Algorithmus zu erstellen. Es werden nur drei algorithmische Grundstrukturen benötigtum jede Programmlogik zu realisieren. Das sind:
   * die Sequenz, Anweisungen werden nacheinander ausgeführt   * die Sequenz, Anweisungen werden nacheinander ausgeführt
   * die Iteration (Wiederholung, Schleife), Anweisungen werden wiederholt ausgeführt   * die Iteration (Wiederholung, Schleife), Anweisungen werden wiederholt ausgeführt
   * die Alternative, bestimmte Anweisungen werden entsprechend einer Bedingung anstatt anderer Anweisungen ausgeführt   * die Alternative, bestimmte Anweisungen werden entsprechend einer Bedingung anstatt anderer Anweisungen ausgeführt
  
-In den strukturierten Sprachen gibt es zwar noch weitere Spielarten dieser drei Grundstrukturen aber dem Wesen nach gibt es tatsächlich nur diese drei. Im Folgenden soll dargestellt werden wie diese Algorithmusbausteine  in C und dann natürlich auch in C++ notiert werden. Beachten Sie die geschweiften Klammern! Diese begrenzen einen Anweisungsblock und sollten immer besonders am Anfang diszipliniert gesetzt werden. +In den strukturierten Sprachen gibt es zwar noch weitere Spielarten dieser drei Grundstrukturenaber dem Wesen nach gibt es tatsächlich nur diese drei. Im Folgenden soll dargestellt werden wie diese Algorithmusbausteine  in C und dann natürlich auch in C++ notiert werden. Beachten Sie die geschweiften Klammern! Diese begrenzen einen Anweisungsblock und sollten immerbesonders am Anfangdiszipliniert gesetzt werden. 
  
->>><code cpp>+><code cpp>
 // Blöcke in C und C++ // Blöcke in C und C++
 { // BEGIN { // BEGIN
Zeile 36: Zeile 39:
 </code> </code>
  
-Das Weglassen von Klammern in bestimmten Fällen sind eben genau das, Sonderfälle und diese sollte man sich als Einsteiger erst mal sparen. Übrigens gibt es die Blockbildung in allen strukturierten Sprachen. Manchmal sind das statt Klammern Schlüsselworte wie //BEGIN// oder //END//. Das gleiche gilt für das Semikolon. Ein Semikolon ist in C das Endekennzeichen einer Anweisung und für den Compiler extrem wichtig. Notieren Sie eine Anweisung immer in einer eigenen Zeile und schließen diese immer mit einem Semikolon ab. Das Einrücken der Anweisungen mit einem //TAB// innerhalb eines Blocks gewährleistet den Überblick zu bewahren.+Blöcke können zusätzlich einen Namen und Parameter erhalten. Das sieht dann in etwa so aus: 
 +><code cpp> 
 +name ( parameter ) 
 +{ // BEGIN 
 + // Blockinhalt 
 +} // END 
 +</code> 
 + 
 +Diese Namen können sogenannte reservierte Worte, also Schlüsselworte der Sprache C/C++ sein. Damit wird dem bezeichneten Block eine bestimmte Funktionalität zugewiesen. Darüber hinaus kann der Programmierer Blöcke bauen, die einen eigenen vom Programmierer festgelegten Namen erhalten. Diese Blöcken können dann unter dem festgelegten Namen aufgerufen werden. In C nennt man solche Blöcke Funktionen. Den Klammern kommt in C also eine konstituierende Rolle zu, die es zu verinnerlichen gilt. 
 + 
 +Das Weglassen von Klammern in bestimmten Fällen sind eben genau Sonderfälle und diese sollte man sich als Einsteiger erst mal sparen. Übrigens gibt es die Blockbildung in allen strukturierten Sprachen. Manchmal sind das statt Klammern Schlüsselworte wie //BEGIN// oder //END//. Das gleiche gilt für das Semikolon. Ein Semikolon ist in C das Endekennzeichen einer Anweisung und für den Compiler extrem wichtig. Notieren Sie eine Anweisung immer in einer eigenen Zeile und schließen diese immer mit einem Semikolon ab. Das Einrücken der Anweisungen mit einem //TAB// innerhalb eines Blocks hilft den Überblick zu bewahren.
  
->>><code cpp>+><code cpp>
 int A,B,C; int A,B,C;
  
Zeile 47: Zeile 60:
  C = A+B; // danach C aus A und B berechnen  C = A+B; // danach C aus A und B berechnen
 } }
 +</code>
  
 +><code cpp>
 // eine Wiederholung ......................................... // eine Wiederholung .........................................
 while ( A < 100 ) // wiederhole ( solange ) while ( A < 100 ) // wiederhole ( solange )
Zeile 53: Zeile 68:
  A = A + 1; // diese Anweisungen  A = A + 1; // diese Anweisungen
 }  }
 +</code>
  
 +><code cpp>
 // eine Alternative .......................................... // eine Alternative ..........................................
 if ( A == 0) // wenn ( das wahr ist ) if ( A == 0) // wenn ( das wahr ist )
Zeile 63: Zeile 80:
  C = A; // führe diese Anweisungen aus  C = A; // führe diese Anweisungen aus
 } }
 +</code>
  
 +><code cpp>
 // ----------------------------------------------------------- // -----------------------------------------------------------
 // ausgewählte Spielarten // ausgewählte Spielarten
Zeile 96: Zeile 115:
  } break;  } break;
 } }
- 
 </code> </code>
  
-===== Zusätzlicher Sprachumfang von C++ (Auszug) ===== +===== zusätzlicher Sprachumfang von C++ (Auszug) ===== 
->>><code>+><code>
 bool catch  false enum bool catch  false enum
 class new delete public template  class new delete public template 
Zeile 108: Zeile 126:
  
  
-Wie wir sehen, ist der eigentliche Sprachumfang von C übersichtlich und die Erweiterung um zur Sprache C++ zu kommen vergleichsweise gering. Was dem Lernenden als umfangreich erscheint, sind die hinzukommenden Bibliotheken, welche vorgefertigte Funktionen anbieten. Des Weiteren ist ersichtlich, dass eine objektorientierte Programmiersprache ihre strukturierten Vorgänger nicht ablöst, sondern auf deren Konzepten und Schlüsselworten aufbaut und diese auch übernimmt. **Die Botschaft lautet also, dass alles was man mit C machen kann funktioniert nach wie vor auch in C++ .** Eine objektorientierte Programmiersprache muss also zusätzlich nur die Ausdrucksmittel zur Realisierung der objektorientierten [[Basiskonzepte]] anbieten. Zu einem objektorientierten Programm kommt man nicht einfach durch Verwendung eines bestimmten Compilers, sondern einzig durch die Art und Weise, wie man das Programm aufbaut. Im Folgenden vorab wichtige C++ Konstrukte, welche ausgewählte besondere Merkmale einer objektorientierten Sprache aufzeigen. Im Verlauf des Tutorials werden wesentliche Aspekte des Gezeigten Schritt für Schritt besprochen.+Wie wir sehen, ist der eigentliche Sprachumfang von C übersichtlich und die Erweiterungum zur Sprache C++ zu kommenvergleichsweise gering. Was dem Lernenden als umfangreich erscheint, sind die hinzukommenden Bibliotheken, welche vorgefertigte Funktionen anbieten. Des Weiteren ist ersichtlich, dass eine objektorientierte Programmiersprache ihre strukturierten Vorgänger nicht ablöst, sondern auf deren Konzepten und Schlüsselworten aufbaut und diese auch übernimmt. **Die Botschaft lautet also, das alleswas man mit C machen kann nach wie vor auch in C++ funktioniert .** Eine objektorientierte Programmiersprache muss also zusätzlich nur die Ausdrucksmittel zur Realisierung der objektorientierten [[Basiskonzepte]] anbieten. Zu einem objektorientierten Programm kommt man nicht einfach durch Verwendung eines bestimmten Compilers, sondern einzig durch die Art und Weise, wie man das Programm aufbaut. Im Folgenden vorab wichtige C++ Konstrukte, welche ausgewählte besondere Merkmale einer objektorientierten Sprache aufzeigen. Im Verlauf des Tutorials werden wesentliche Aspekte des Gezeigten Schritt für Schritt besprochen.
  
 ===== Deklarieren von Klassen in C++ ===== ===== Deklarieren von Klassen in C++ =====
-Es ist ein Anwendungsprogramm mit dem Namen Applikation (englisch: //Application//) zu entwickeln. Die Anwendung soll zunächst geplant und dann programmiert werden und letztlich benötigen wir eine Instanz von dem Programm.+Es ist ein Anwendungsprogramm mit dem Namen Applikation (englisch: //Application//) zu entwickeln. Die Anwendung soll zunächst geplant und dann programmiert werden und letztlich benötigen wir noch eine Instanz von dem Programm.
  
->>>{{:app.jpg?150|}}+>{{:app.jpg?150|}}
  
->>><code cpp>+><code cpp>
 // Klasse Name { Bauplan } Instanz; // Klasse Name { Bauplan } Instanz;
 class Application class Application
Zeile 126: Zeile 144:
 Die Applikation **ist eine** Mikrocontrolleranwendung. Diese soll alle Möglichkeiten  der vorhandenen Klasse Controller besitzen. Somit erbt die Applikation am besten alle Merkmale vom Controller.  Die Applikation **ist eine** Mikrocontrolleranwendung. Diese soll alle Möglichkeiten  der vorhandenen Klasse Controller besitzen. Somit erbt die Applikation am besten alle Merkmale vom Controller. 
  
->>><code cpp>+><code cpp>
 // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz; // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz;
 class Application : public Controller class Application : public Controller
Zeile 137: Zeile 155:
 Der Controller wird eingeschaltet und arbeitet dann fortlaufend taktgesteuert. Oh ja, wir erinnern uns dunkel. Subjekt und Prädikat. **WER** (der Controller) macht **WAS** (wird eingeschaltet, arbeitet)... Dafür sollte es jetzt Operationen in der Klasse geben. Der Controller wird eingeschaltet und arbeitet dann fortlaufend taktgesteuert. Oh ja, wir erinnern uns dunkel. Subjekt und Prädikat. **WER** (der Controller) macht **WAS** (wird eingeschaltet, arbeitet)... Dafür sollte es jetzt Operationen in der Klasse geben.
  
->>><code cpp>+><code cpp>
 // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz; // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz;
 class Application : public Controller class Application : public Controller
Zeile 161: Zeile 179:
  
 ===== Aggregationen und Kapselung in C++ ===== ===== Aggregationen und Kapselung in C++ =====
-Es soll eine LED angeschlossen werden. An diese LED wollen wir niemand anderes heranlassen. Wir schützen diese vor unberechtigtem Zugriff.+Es soll eine LED angeschlossen werden. An diese LED wollen wir niemand anderen heran lassen. Wir schützen diese vor unberechtigtem Zugriff.
  
->>><code cpp>+><code cpp>
 // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz; // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz;
 class Application : public Controller class Application : public Controller
Zeile 184: Zeile 202:
 Die LED ist eine fertige Klasse aus dem Framework. Wir müssen der LED mitteilen, an welchem Port-Pin sie angeschlossen ist und wir wollen sie einschalten. Die LED ist eine fertige Klasse aus dem Framework. Wir müssen der LED mitteilen, an welchem Port-Pin sie angeschlossen ist und wir wollen sie einschalten.
  
->>><code cpp>+><code cpp>
 // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz; // Klasse Name : Sichtbarkeit Basisklasse { Bauplanerweiterung } Instanz;
 class Application : public Controller class Application : public Controller
Zeile 208: Zeile 226:
  
 ====== Nächstes Thema ====== ====== Nächstes Thema ======
-... +[[Grafische Programmierung mit der UML]]