FB Informatik Prof. Dr. R.Nitsch Programmieren 1 - Grundlagen Reiner Nitsch 06151/16-8417 [email protected] Homepage: www.fbi.h-da.de/~r.nitsch Raum: D14/0.09 Programmiersprachen FB Informatik Prof. Dr. R.Nitsch • Maschinensprachen • Assembler-Sprachen • Hochsprachen (C, C++, Java, Pascal, Fortran, Cobol, …) 27.03.2008 C++ Grundlagen 2 Programmiersprachen: Machschinensprachen • • • • • • FB Informatik Prof. Dr. R.Nitsch Muttersprache des jeweiligen Prozessors Definiert durch sein Hardwaredesign (total maschinenabh.) besteht aus aufeinanderfolgenden Bits Für Menschen schwer nachvollziehbar Für Programmierzwecke völlig ungeeignet Höhere Programmiersprachen sind besser geeignet. Beispiel: Code B17D41C3 B18D41C7 4FCA472A DC7E23BA 27.03.2008 Kommentar Lade Wert in Adresse 41C3 in Reg. 1 Lade Wert in Adresse 41C7 in Reg. 2 Addiere die Registerinhalte und speichere das Ergebnis in Reg. 1 Speichere Inhalt von Register 1 unter der Speicheradresse 23BA C++ Grundlagen 3 Programmiersprachen: Assembler-Sprachen FB Informatik Prof. Dr. R.Nitsch • Eine Assemblersprache repräsentiert die Maschinensprache einer spezifischen Prozessorarchitektur in einer für den Menschen lesbaren und merkbaren Form. • Jede Prozessorarchitektur hat folglich ihre eigene Assemblersprache. • Beispiel: LOAD R1, LOAD R2, ADD R1, STORE R1, #41C3h #41C7h R2 #23BAh Assembler B17D41C3 B18D41C7 4FCA472A DC7E23BA ☺Für Menschen leichter merkbar und lesbar ☺Ideal für zeitkritische Algorithmen durch optimale Ausnutzung des Befehlssatzes ☺Hohe Speicherplatzökonomie Total maschinenabhängig Ungeeignet für größere Softwareprojekte 27.03.2008 C++ Grundlagen 4 Programmiersprachen: Hochsprachen • • FB Informatik Prof. Dr. R.Nitsch Mehrere Maschinenbefehle werden zu Anweisungen (statements) zusammengefasst Benutzen Elemente der Alltagssprache und bekannte mathematische Notationen Beispiel: int number1, number2, sum; sum = number1 + number2; Anweisung 1 Anweisung 2 • Anweisungen werden von Compilern bzw. Interpretern in Maschinencode übersetzt. ☺ Für Menschen leicht versteh- und anwendbar ☺ Maschinenunabhängig 27.03.2008 C++ Grundlagen 5 Eigenschaften von C FB Informatik Prof. Dr. R.Nitsch • • • • • • C ermöglicht direkte Speicherzugriffe und sehr hardwarenahe Konstrukte Gute Anpassung an die Prozessorarchitektur (Hardware) Erlaubt maschinennahe Programmierung Hohe Portabilität Modulare Programme C-Compiler erzeugen sehr effizienten Code (sowohl bzgl. Laufzeit als auch bzgl. Programmgröße). UNIX ist in C programmiert. • Sprachumfang von C ist klein, übersichtlich und relativ leicht erlernbar (nur 32 Schlüsselworte) • C ist eine aus der Praxis entstandene und für die Praxis geschaffene Sprache. Sie ist keine "didaktische" Sprache, wie z.B. die Sprache PASCAL, die von Wirth speziell für Lehrzwecke entworfen wurde nur sehr eingeschränkt Prüfungen zu Speicherzugriffen, Variablentyp, Stacknutzung etc., d.h. keine strenge Typenkonsistenz (vielfältige automatische Typkonvertierungen) vielfältige Fehlermöglichkeiten, die vom Compiler nicht erkannt werden können für sicherheitskritische Anwendungen (Medizintechnik, Verkehrsleittechnik, Raumfahrt) wenig geeignet. – Grundphilosophie von C : 27.03.2008 C++ Grundlagen 6 Eigenschaften von C++ FB Informatik Prof. Dr. R.Nitsch • Hybride Sprache: – Enthält den Sprachumfang von C als Teilmenge (modular, effizient, maschinennah, portabel, formatfrei) – Unterstützt Konzepte der objektorientierten Programmierung (kurz: OOP) • Datenabstraktion: Bildung von Klassen zur Beschreibung von Objekten. • Datenkapselung: Kontrolliert den Zugriff auf Daten von Objekten. • Vererbung: Aus Basisklassen werden Subklassen abgeleitet, die gleiche und speziellere Eigenschaften wie die Basisklassen haben. • Polymorphie (griech. Vielgestaltigkeit): Erlaubt die Implementierung von Anweisungen, die zur Laufzeit in Abhängigkeit vom Objekttyp verschiedene Wirkung haben können. • Getypte Sprache (strenge Typkontrolle durch Compiler) • Erweiterungen ohne Bezug zur OOP – Referenzen – Templates – Ausnahmebehandlung (Exception-handling) – Standard Library (STL) • C++ übertrifft C in Bezug auf Entwicklungsgeschwindigkeit, Wartbarkeit, Informationssicherheit, Entwurfsunterstützung und Abstraktionsniveau. 27.03.2008 C++ Grundlagen 7 All 62 C++ keywords • FB Informatik Prof. Dr. R.Nitsch Cannot be used as identifiers or variable names C++ Keywords Keywords common to the C and C++ programming languages auto continue enum if short switch volatile C++ only keywords asm delete inline private static_cast try wchar_t 27.03.2008 break default extern int signed typedef while case do float long sizeof union char double for register static unsigned const else goto return struct void bool dynamic_cast mutable protected template typeid catch explicit namespace public this typename class false new reinterpret_cast throw using const_cast friend operator C++ Grundlagen true virtual 8 Erstellen eines C++ Programms FB Informatik Prof. Dr. R.Nitsch Editor .cpp Quelldatei HeaderDateien Preprozessor Compiler Übersetzen in Maschinencode Entwicklungsumgebung .obj Objektdatei Standard Bibliothek Linker Binden der Objektdateien weitere Objectdateien .exe Ausführbare Datei Loader Debugger 27.03.2008 RAM C++ Grundlagen 9 Ein einfaches Programm: 1 Textzeile ausgeben FB Informatik Prof. Dr. R.Nitsch • Kommentare – Teil der Programmdokumentation – Verbessern die Lesbarkeit des Programmcodes – Werden vom Preprozessor entfernt – Einzeiliger Kommentar • Beginnt mit // Beispiel: //This is a single-line comment – Mehrzeiliger Kommentar • /* This is a multiple-line comment */ • Preprozessor Anweisungen – steuern der Preprozessor bei der Quellcodebearbeitung vor der Compilierung – Beginnen mit # 27.03.2008 C++ Grundlagen 10 Ein einfaches Programm: 1 Textzeile ausgeben // Fig. 1.2: fig01_02.cpp // My first program in C++. FB Informatik Prof. Dr. R.Nitsch 1-zeilige Kommentare Preprozessor Direktive zum Einfügen der Header-Datei <iostream> der C++ Bibliothek. Tipp: Verwende nicht <iostream.h> der C-Bibliothek #include <iostream> // function main begins program execution int main() Funktion main muss es genau 1-mal in jedem C++ Programm geben. Funktion main gibt Ganzzahl-Wert zurück. { std::cout << "Welcome to C++!\n"; Funktionsrumpf beginnt mit {. Anweisungen enden mit ; Name cout gehört zum Namensraum std. return 0; Stream-Einfügeoperator: Der rechte Wert wird in den durch cout kontrollierten Ausgabestrom eingefügt. // indicate that program ended successfully } // end function main Funktionsrumpf endet mit } . Schlüsselwort return ist eine von mehreren Möglichkeiten, eine Funktion zu beenden. Wert 0 kennzeichnet ein erfolgreiches Programmende. Output Welcome to C++! 27.03.2008 C++ Grundlagen 11 Escape Sequenzen FB Informatik Prof. Dr. R.Nitsch std::cout << "Welcome to C++\n"; • Escape Zeichen '\' kündigt Steuerzeichen für Ausgabe an. – \n positioniert Cursor am Anfang der nächsten Zeile (newline) – \t bewegt Cursor zum nächsten Tabstop – \r Cursor zum Zeilenanfang ohne Zeilenvorschub – \a erzeugt Hinweiston – \\ gibt backslash '\' aus – \" gibt Anführungszeichen aus – … es gibt noch mehr std::cout << "Diese Zeichenkette enthaelt \"Anfuehrungsstriche\"." erzeugt diese Ausgabe auf Bildschirm: 27.03.2008 Diese Zeichenkette enthaelt "Anfuehrungsstriche". C++ Grundlagen 12 Ein einfaches Programm: mehrere Textzeilen ausgeben FB Informatik Prof. Dr. R.Nitsch // Fig. 1.4: fig01_04.cpp // Printing a line with multiple statements. #include <iostream> // function main begins program execution int main() { std::cout << "Welcome "; std::cout << "to C++!\n"; Mehrere Stream-Ausgabeanweisungen erzeugen 1 Ausgabezeile Mehrzeilige Ausgabe mittels mehrerer '\n' std::cout << "Welcome\nto\n\nC++!\n"; return 0; // indicate that program ended successfully } // end function main Welcome to C++! Welcome to C++! 27.03.2008 C++ Grundlagen 13 Variablen FB Informatik Prof. Dr. R.Nitsch • sagen dem Compiler, – wo sich Daten befinden (Adresse) – wie der Wert gespeichert ist (Typ) – was für ein Wert vorliegt (Wert) • sagen dem Programmierer was für Daten gespeichert sind • Variablen – müssen vor erster Benutzung definiert werden Beispiel: int number1=10, number2; Typ Name Initialisierung Name (o.Init.) – Manchmal müssen Variable auch "nur" deklariert werden (Definition schliesst die Deklaration mit ein) – bestehen aus Buchstaben, Ziffern und '_' – sind case sensitive – müssen mit Buchstaben oder '_' beginnen – dürfen kein Schlüsselwort sein • Konventionen – möglichst selbsterklärend – sollten nicht mit '_' oder '__' beginnen 27.03.2008 C++ Grundlagen Variablen-Initialisierung: Variablen-Definition: Variablen-Deklaration: Der Compiler • erfährt neuen Variablennamen • erfährt den Variablentyp • reserviert Speicherplatz • schreibt Anfangswert in Speicher Weitere Beispiele: int number1 = 10; int number2 (20); char c = 'a'; const float pi(3.14); //read only const int hundred; Fehler: muß initialisiert werden 14 Namen (Bezeichner) FB Informatik Prof. Dr. R.Nitsch • Einzelne Bestandteile eines Programms werden über Namen Falsch Richtig identifiziert. 3terVersuch versuch3 Anzahl der Werte anzahlDerWerte Vorschriften zur Namensbildung: zähler zaehler • Namen (Identifier) bestehen aus Buchstaben, Ziffern und Unterstrichen "_" ; sie müssen mit einem Buchstaben oder Unterstrich "_" beginnen; Richtig • Groß- und Kleinbuchstaben werden unterschieden; schlecht gut • die Anzahl signifikanter Zeichen ist implementierungsabhängig (i.a. summe s >30) cnt counter • Reservierte C++-Worte (Schlüsselwörter . engl. key words) sind zur Namensgebung verboten. (z.B. if, main, while, const, class, .) openFile _open • Empfehlungen atoi alphanum_to_int – Name sollen nicht mit Unterstrich "_" beginnen. ascii2int – Namen sollen natürlich-sprachig, problemnah, selbsterklärend sein. print toStream – Inhaltsleere Namen (i, n) sind allenfalls für lokale Schleifenzähler etc. sinnvoll. Hier gibt es allerdings Namenskonventionen (-> später) – Darüber hinaus gibt es projektbezogene oder firmenübliche Warum besser englische Namenskonventionen, z.B. Variablennamen beginnen stets mit Kleinbuchstaben, Typbezeichner dagegen mit Großbuchstaben. Namen verwenden? – Vorsicht mit Abkürzungen: die Verständlichkeit darf nicht leiden. – Generell gilt: Namen sind entscheidend über die Lesbarkeit von Programmen und sind somit ein Qualitätsmerkmal der erzeugten Software! 27.03.2008 C++ Grundlagen 15 Wertspeicher (Variablen und Konstanten) • • • • • • • • werden erzeugt durch Reservierung von Speicherplatz können einen Wert zugewiesen bekommen (schreiben, initialisieren bei der Erzeugung), wobei der bisherige Wert verloren geht können gelesen werden, um ihren Wert zu erfahren ohne diesen zu ändern. sind gültig, nachdem sie erzeugt wurden und werden ungültig, wenn der reservierte Speicherplatz frei gegeben wird. Sie haben also einen Gültigkeitsbereich. haben einen Sichtbarkeitsbereich, in dem auf sie zugegriffen werden kann sind gekennzeichnet durch Namen zur Identifizierung, Datentyp, Adresse und Anzahl Bytes im Speicher und ihren aktuellen Wert Variable sind Wertspeicher , die verschiedene Werte eines Typs speichern können: – zu verschiedenen Zeitpunkten können Variablen verschiedene Werte enthalten; – alle Werte, die über die Programmlaufzeit hinweg von einer Variablen eingenommen werden, gehören zum gleichen Typ. Konstanten sind Wertspeicher, die während der gesamten Programmlaufzeit denselben Wert enthalten. Im Programmcode fest eingetragene Werte werden ebenfalls als Konstanten bezeichnet. 27.03.2008 C++ Grundlagen FB Informatik Prof. Dr. R.Nitsch Name Typ Wert Adresse Gültigkeitsbereich Sichtbarkeitsbereich Merkmale eines Wertspeichers (komplett) 16 Wertspeicher in C++ FB Informatik Prof. Dr. R.Nitsch • müssen vor erster Benutzung definiert werden! • dürfen im Programm nur einmal definiert werden! • Manchmal müssen Variable "nur" deklariert werden (Definition beinhaltet die Deklaration) • Konstanten müssen zusätzlich initialisiert werden Beispiel: Initialisierung int number1=10; int number2; Name (o.Init.) Typ Name Initialisierung Definition Weitere Beispiele: int number1 = 10; int number2 (20); char c = 'a'; const float pi(3.14); //read only const int hundred; Fehler: muß initialisiert werden 27.03.2008 C++ Grundlagen Deklaration Der Compiler • erfährt neuen Variablennamen • erfährt den Variablentyp • reserviert Speicherplatz • schreibt Anfangswert in Speicher 17 Programm zum Addieren von 2 Ganzzahlen FB Informatik Prof. Dr. R.Nitsch // Addition program (Fig. 1.6: fig01_06.cpp) #include <iostream> int main() // function main begins program execution { int number1; // first number to be input by user Integer Variablen definieren. int number2; // second number to be input by user int sum=0; // variable in which sum will be stored std::cout << "Enter first integer\n"; // prompt Benutzer-Eingabe vom StandardeingabeStream lesen mit Stream-Leseoperator. std::cin >> number1; std::cout << "Enter second integer\n"; // prompt std::endl gibt '\n' aus und leert dann std::cin >> number2; // read an integer den Ausgabepuffer. sum = number1 + number2; // assign result to sum std::cout << "Sum is " << sum << std::endl; // print sum return 0; // indicate that program ended successfully } // end function main Enter first integer 45 Enter second integer 72 Sum is 117 27.03.2008 Aneinandergereihte Ausgabe in Stream. Alternative: Summe in Ausgabe-Anweisung berechnen: std::cout << "Sum is " << integer1 + integer2 << std::endl; C++ Grundlagen 18 Speicherkonzept bei Variablen • FB Informatik Prof. Dr. R.Nitsch Variablen (Wertspeicher) – sind bestimmten Bereichen im Speicher zugeordnet – sind u.a. gekennzeichnet durch Namen (name), Datentyp (type) und Wert (value) – schreibender Zugriff überschreibt den bisherigen Wert – Lesender Zugriff verändert den aktuellen Wert nicht (Namens)Bereichsauswahloperator std::cin >> number1; Stream-Ausleseoperator number1 5 number1 number2 5 number1 number2 sum 5 Standard-Eingabe-Streamobjekt – Angenommen Benutzer gibt 5 ein std::cin >> number2; – Angenommen Benutzer gibt 6 ein Zuweisungs operator Ausdruck Ausdruck Ausdruck sum = number1 + number2; 6 6 011 Jede Schreibweise einer formalen Sprache, die irgendwie einen bestimmten Wert ausdrücken soll, wird als ein Ausdruck bezeichnet: "Ausdrücke haben einen Wert" 27.03.2008 C++ Grundlagen 19 Programm zum Addieren von 2 Ganzzahlen - Kommentare dazu FB Informatik Prof. Dr. R.Nitsch • Eingabe von Tastatur – Beispiel: int number1; std::cin >> number1; – cin: Standard-Eingabe-Streamobjekt, das Tastatureingaben entgegen nimmt. – >> Ausleseoperator: Sagt dem Streamobj. was mit den Tastatureingaben geschehen soll. • Wartet auf Eingabewert des Benutzers, Enter (Return) Taste schliesst Eingabe ab! • Wandelt Eingabewert in den Typ der Variablen (hier: int) um! – Wechselt in Fehlerzustand und blockiert, wenn Umwandlung Vor der 5 number1 fehlschlägt! Zuweisung 6 number2 • Speichert Eingabewert in rechtem Operand (hier: number1) • Zuweisung (Assignment) sum 0 – = (Zuweisungsoperator) Nach der 5 number1 – Binärer Operator (benötigt 2 Operanden) Zuweisung 6 number2 – Weist den Wert des rechten Ausdrucks (r-value) 11 sum dem linken Operanden (l-value) zu. Dessen bisheriger Wirkung der Zuweisung Wert wird dabei überschrieben. im Speicher 27.03.2008 C++ Grundlagen – Beispiel: 20 using Anweisung FB Informatik Prof. Dr. R.Nitsch • using std::cout; // Teilt dem Compiler mit, daß mit dem cout // derjenige aus dem Namensbereich std // gemeint ist • cout << "Hello…"; // geht jetzt ohne vorangestelltes std:: • using namespace std; // alle nachfolgenden Bezeichner, die keine // Bezeichner des Programms sind, beziehen sich // auf den namespace "std" • Beispiel folgt! 27.03.2008 C++ Grundlagen 21 Programm zum Addieren von 2 Ganzzahlen FB Informatik Prof. Dr. R.Nitsch // Addition program (Fig. 1.6: fig01_06.cpp) #include <iostream> Kann durch Anweisung using namespace std; ersetzt werden! using std::cout; Alle nachfolgenden Bezeichner sind aus dem Namensraum std:: using std::cin using std::endl; Geht jetzt auch ohne int main() // function main begins program execution vorangestelltes std:: { int number1; // first number to be input by user int number2; // second number to be input by user int sum; // variable in which sum will be stored cout << "Enter first integer: "; // prompt cin >> number1; cout << "Enter second integer: "; // prompt cin >> number2; // read an integer sum = number1 + number2; // assign result to sum cout << "Sum is " << sum << endl; // print sum return 0; // indicate that program ended successfully } // end function main 27.03.2008 C++ Grundlagen 22 Entwicklungsumgebung FB Informatik Prof. Dr. R.Nitsch • Zur Zeit am FB Informatik verwendet: Microsoft Visual C++ 2005 Express Edition • Download von hier: http://www.microsoft.com/express/2005/ • Die Erstellung eines C/C++- Standardprogramms wird hier erklärt: http://msdn2.microsoft.com/de-de/library/ms235629(VS.80).aspx • Nach dem Installieren und Starten der Entwicklungsumgebung meldet sie sich so (oder ähnlich) auf dem Bildschirm: 27.03.2008 C++ Grundlagen 23 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch • Zu einem spezifizierten Pfad wird ein Verzeichnis mit dem Projektnamen erzeugt, in dem alle Projektdateien abgelegt werden. Das erzeugte Projekt soll zunächst leer sein. Aktionen der Entwicklungsumgebung: Im Verzeichnis C:\Temp\Projects wird ein Projektverzeichis C:\Temp\Projects\MyFirstProject Erzeugt und darin die Projektdateien abgelegt. Mausklick auf OK … 27.03.2008 C++ Grundlagen 24 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch … öffnet dieses Fenster Mausklick auf „Weiter >“ … 27.03.2008 C++ Grundlagen 25 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch … öffnet dieses Fenster Projektmappe Mausclick auf Fertigstellen erzeugt das Projektverzeichnis sowie 5 Projektsteuerdateien. MS Explorer 27.03.2008 C++ Grundlagen 26 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch Die noch fehlende Anwendungsdatei „main.cpp“ wird hinzugefügt durch Rechts-Click auf MyFirstProject im Arbeitsfenster – Hinzufügen – Neues Element… Nach Klick auf "Hinzufügen“ wird die Datei "main.cpp" im Projektverzeichnis erstellt. In der Entwicklungsumgebung wird diese dann im Editorbereich zur Bearbeitung geöffnet (siehe nächste Seite) 27.03.2008 C++ Grundlagen 27 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch Der Quellcode für eine main-Funktion ohne Aktion wurde vom Benutzer hier bereits eingetippt. Die Anwendung ist bereits lauffähig! Editorbereich 27.03.2008 C++ Grundlagen 28 Anlegen eines einzelnen Projektes FB Informatik Prof. Dr. R.Nitsch Mit „Debuggen / Starten ohne Debuggen“ oder Strg+F5 wird kompiliert und das Projekt gestartet 27.03.2008 C++ Grundlagen 29 Fehlersuche in Programmen FB Informatik Prof. Dr. R.Nitsch • Compilerfehlermeldungen unterstützen die Suche nach Syntaxfehlern – Wichtig: Immer zuerst die erste Fehlermeldung bearbeiten; danach erneut compilieren. • Ein übersetztes und damit lauffähiges Programm ist zwar frei von Syntaxfehlern aber nicht unbedingt frei von logischen Fehlern ( = Laufzeitfehlern ) • Der Debugger unterstützt den Programmierer beim Aufspüren von logischen Fehlern. Debuggermenü Symbolleiste "Debug" aktiviert 27.03.2008 C++ Grundlagen 30 Debugger steuern FB Informatik Prof. Dr. R.Nitsch Menüpkt „Debuggen / Debuggen starten“ oder Taste F5 startet den Debugger: Einzelschritt Prozedurschritt Ausführen bis Rücksprung Ausführen bis Cursor Nächste Anweisung zeigen Hexadezimale Anzeige der Variablenwerte Neu starten Debuggen beenden Debuggen starten/ Weiter Symbolleiste "Debug" Links-Click hier setzt neuen Haltepunkt 2. Links-Click löscht ihn wieder Überwachung "Auto" Weitere Überwachungsfenster 27.03.2008 C++ Grundlagen 31 Idealisierter Computer CPU FB Informatik Prof. Dr. R.Nitsch MassStorage Memory Interfaces Bus Bus Alle Computer sind ausgestattet mit • • • • CPU: Prozessor Speicher: RAM, ROM, EPROM, Cache Datenträger: Disketten-, Festplatten-, CD-ROM- und andere Laufwerke Schnittstellen: Serielle und paralelle Anschlüsse für Maus, Netzwerk, Tastatur, Bildschirm, usw. 27.03.2008 C++ Grundlagen 32 Operating Systems (OS) FB Informatik Prof. Dr. R.Nitsch • An operating system is software which controls the general operation of a computer. An operating system – controls the loading and running of programs – controls the use of peripherals such as disc drives and printers – organises the use of the computer’s memory. – handles interrupts (signals from devices) – maintains security (passwords etc) • Part of the operating system is stored on a ROM chip. When the computer is switched on, the first thing that happens is that part of the operating system is loaded into memory. This process is called booting up. • Examples of Operating Systems : – UNIX, Linux, Windows, MS-DOS 27.03.2008 C++ Grundlagen 33 Evolution von Operating Systems (OS) FB Informatik Prof. Dr. R.Nitsch • Batch Processing OS: Early systems (one task at a time) – Programs and data are collected together in a batch before processing starts. – Each piece of work for a batch processing system is called a job. A job usually consists of a program and the data to be run. – Jobs are stored in job queues until the computer is ready to process them. – No interaction between the user and the computer while the program is being run. • Multiprogramming OS: – Runs several different programs in a computer apparently at the same time. – The computer has a number of programs loaded into memory and the OS switches quickly between them, processing a little bit of each one in turn. – The high speed of the processor makes it seem like more than one program is being run at the same time. On a PC it is usually called multitasking. 27.03.2008 C++ Grundlagen 34 Evolution von Operating Systems (OS) FB Informatik Prof. Dr. R.Nitsch • Multi-access OS: – A number of users have terminals (workstations) which are directly linked to a central computer via a Teletype Network (Telnet). Each user can use the computer interactively. – Often called a multi-user OS. 27.03.2008 C++ Grundlagen 35 Visual Studio .NET Visual Studio .NET FB Informatik Prof. Dr. R.Nitsch • .NET Framework ist eine neue Computerplattform, die in der hochgradig verteilten Internetumgebung die Entwicklung von Anwendungen vereinfacht. .NET Framework wurde im Hinblick auf folgende Zielsetzungen entwickelt: – Bereitstellung einer konsistenten, objektorientierten Programmierumgebung, in der Objektcode gespeichert wird. Die Ausführung erfolgt dann entweder lokal oder über Remotezugriff bzw. lokal mit Verteilung über das Internet. – Bereitstellung einer Codeausführungsumgebung, mit der Konflikte bei der Softwareweitergabe und Versionskonflikte auf ein Minimum beschränkt werden. – Bereitstellung einer Codeausführungsumgebung, die eine sichere Ausführung gewährleistet, und zwar auch von Code, der von unbekannten oder nur halbvertrauenswürdigen Dritten erstellt wurde. – Bereitstellung einer Codeausführungsumgebung, die nicht mehr die bei interpretations- oder skriptbasierten Umgebungen auftretenden Leistungsprobleme aufweist. – Schaffung einer konsistenten Entwicklungsumgebung für die verschiedensten Anwendungsarten, wie beispielsweise Windows- und webbasierte Anwendungen. – Aufbau der gesamten Kommunikation auf Industriestandards, um die Integration von Code, der auf .NET Framework basiert, in jeden anderen Code zu gewährleisten. 27.03.2008 C++ Grundlagen 36