1. Einführung 1.1 Programmierung & Software 1.2 Programmiersprachen Folie 9 Apr-05 Grundbegriffe: Programm vs. Software Eine zur Lösung einer Aufgabe vollständige Anweisung zusammen mit allen erforderlichen Vereinbarungen heißt PROGRAMM. Ein PROGRAMM setzt sich aus Befehlen zusammen, die von der Zentraleinheit in logischer Reihenfolge abgearbeitet werden. Die Menge von PROGRAMMEN, zugehörigen DATEN und notwendigen DOKUMENTATIONEN, die zusammengefasst erlauben, mit Hilfe eines Computers Aufgaben zu erledigen, nennt man SOFTWARE. SOFTWARE-ENGINEERING: Zielorientierte Bereitstellung und systematische Verwendung von Prinzipien, Methoden, Konzepten, Notationen und Werkzeugen für die arbeitsteilige, ingenieurmäßige Entwicklung und Anwendung von umfangreichen SOFTWARE(-Systemen). Folie 10 Apr-05
Software - Charakteristika Software ist ein immaterielles Produkt Software ist schwer zu bewerten Software unterliegt keinem Verschleiß Software ist im allgemeinen leichter und schneller änderbar als ein technisches Produkt Software benötigt keine Ersatzteile Software altert Folie 11 Apr-05 Software - Tendenzen 60 MOI Zunehmende Bedeutung im Verhältnis zur Hardware Wachsende Komplexität Nachfragestau Euro-Einführung Jahr 2000-Problematik Strategischer Wettbewerbsfaktor Zunahme der Standardsoftware im Vergleich zur Individualsoftware Zunehmende Fremdentwicklung im Vergleich zur Eigenentwicklung Zunehmende Altlasten Zunehmende Qualitätsanforderungen 50 MOI 40 MOI 20 MOI 10 MOI GEMINI MERCURY 1960 1970 1980 1990 SPACE SCHUTTLE APOLLO Folie 12 Apr-05
Software - Systematisierung Software Systemsoftware (Basissoftware) Betriebssysteme Steuerprogramme Übersetzungsprogramme Dienstprogramme Systemnahe Software (z.b. Datenbankverwaltungssysteme, Kommunikationsprogramme) Anwendungssoftware (application software) Technisch/Wissenschaftliche Programme Kommerzielle Programme (auf betriebliche Fkt. bezogen) Branchenprogramme Programmiersprachen, Programmentwicklungssysteme (CASE-Systeme) Folie 13 Apr-05 Softwareschichten Benutzer Benutzer Benutzeroberfläche Anwendungssoftware DBMS Kommunikation Assembler CASE Compiler Individuell entwickelte Programme Betriebssystem Dienstprogramme Branchenpakete Interpreter Funktional orientierte Pakete Benutzer Benutzer Folie 14 Apr-05
1. Einführung 1.1 Programmierung & Software 1.2 Programmiersprachen Folie 15 Apr-05 Programmiersprachen Eine PROGRAMMIERSPRACHE ist eine Künstliche Sprache zum Abfassen von Computerprogrammen (DIN 44300). Programmiersprachen sollen es ermöglichen, den Lösungsweg (Algorithmus) für eine spezielle Problemstellung in einer der Maschine verständlichen Sprache zu formulieren. Folie 16 Apr-05
Programmierumgebung Eine PROGRAMMIERUMGEBUNG ist ein Softwaresystem, das eine Sammlung von Werkzeugen, die zur Entwicklung von Software dient, zur Verfügung stellt. Wesentliche Komponenten: TEXTEDITOR: zur Erfassung des Quelltextes ÜBERSETZUNGSPROGRAMME: Programm, das Anweisungen in einer höheren Sprache liest, analysiert und in bedeutungsgleiche Maschinenbefehle umwandelt DEBUGGER: ermöglicht ein schrittweises Abarbeiten des Programms zu Testzwecken HILFESYSTEM: erlaubt die kontextsensitive Abfrage von Informationen zur Programmsyntax u.ä. GUI-BUILDER: Modellierung der Benutzeroberfläche Folie 17 Apr-05 Programmierumgebung Visual Basic Hilfesystem Übersetzungsprg. Debugger Folie 18 Apr-05 Texteditor
Programmiersprachenstammbaum Folie 19 Apr-05 Sprachgenerationen Sprachen der ersten Generation: MASCHINENSPRACHEN Sprachen der zweiten Generation: ASSEMBLERSPRACHEN Sprachen der dritten Generation: HÖHERE PROGRAMMIERSPRACHEN Sprachen der vierten Generation: 4GL-SYSTEME Maschinensprache Assemblersprachen Höhere Programmiersprachen 4GL-Systeme Alternative Sprachrichtungen Alternative Sprachrichtungen: SPRACHEN DER KÜNSTLICHEN INTELLIGENZ (Sprachen der fünften Generation) OBJEKTORIENTIERTE PROGRAMMIERSPRACHEN VISUELLE PROGRAMMIERSPRACHEN Folie 20 Apr-05
Maschinensprachen (1. Generation) Maschinenorientierte Sprache Jeder Befehl besteht aus einer Folge der Binärzeichen 0 und 1 entsprechend dem Befehlssatz des jeweiligen Prozessors. Beispiel: Addiere 3+4 (Großrechner) Befehl Addition, Operanden 3, 4: 00011010 0011 0100 Befehlswort 3 4 unmittelbare Hardware-Orientierung, unverständlich, unübersichtlich, fehleranfällig Folie 21 Apr-05 Assemblersprachen (2. Generation) Folie 22 Apr-05 maschinenorientierte Sprache, die den Aufbau der Befehle der Maschinensprache beibehält, die Instruktionsteile jedoch nicht primär verschlüsselt, sondern durch Symbolik (mnemotechnische Abkürzungen) ausdrückt Beispiel: Addiere 3+4 Assemblerbefehl: ADD 3, 4 Die Übersetzung in Maschinensprache erfolgt mit Hilfe eines ASSEMBLIERERS (1:1-Übersetzung). optimale Speicherausnutzung und Verarbeitungsgeschwindigkeit enge Hardware-Orientierung, unübersichtlich, fehleranfällig
Höhere / Prozedurale Programmiersprachen (3. Generation) Weitgehend genormte Sprachen, die für einen speziellen Anwendungsbereich konzipiert (problemorientiert) sind und nahezu unabhängig von einem bestimmten Rechnertyp sind. Die Programmierung erfolgt durch die Formulierung von Algorithmen (Algorithmus = Abfolge von Operationen, die jeweils Daten bearbeiten). Beispiel: Addiere 3+4: Operation SUMME = 3 + 4 Übersetzung in Maschinensprache erfolgt durch einen Compiler/Interpreter (1:n-Übersetzung) schlechtere Performance Folie 23 Apr-05 Übersetzungsprogramm I Ein Programm, das nicht in Maschinensprache abgefasst ist, wird QUELLPROGRAMM (QUELLCODE/SOURCECODE) genannt. Ein in Maschinensprache vorliegendes Programm (=Zielprogramm des Übersetzungsvorgangs) heißt OBJEKTPROGRAMM (OBJEKTCODE). Unter einem ÜBERSETZUNGSPROGRAMM (TRANSLATOR) versteht man ein Programm, das Anweisungen in einer höheren Sprache oder in Assemblersprache liest, analysiert (Optimierung) und in bedeutungsgleiche Maschinenbefehle umwandelt. Folie 24 Apr-05
Übersetzungsprogramm II QUELLCODE: ÜBERSETZUNGS- PROGRAMM PROGRAM test; test; BEGIN BEGIN (Assemblierer, WriteLN ('Hallo!'); Compiler, Interpreter)...... OBJEKTCODE: 0101000100111 0110010011111 1110110001100 1100011... Hallo! Folie 25 Apr-05 Compiler vs. Interpreter Compiler Ein Übersetzungsprogramm, das in einer höheren Programmiersprache abgefassten Quellcode komplett in Zielanweisungen einer maschinenorientierten Programmiersprache umwandelt (kompiliert). Das erzeugte Objektprogramm kann für spätere Verarbeitungsläufe abgespeichert werden, so dass vor der (erneuten) Ausführung keine Übersetzung mehr nötig ist. Interpreter Ein Programm zur schrittweisen Übersetzung von Quellcode in lauffähigen Maschinencode, welcher sofort (zeilenweise) ausgeführt wird. Im Unterschied zum Kompilieren entsteht kein vollständiges, aufbewahrungsfähiges Objektprogramm. Bei jedem Programmstart erfolgt ein erneuter Übersetzungsvorgang Folie 26 Apr-05
Assemblierer Compiler Interpreter Assemblierer Maschinensprache Compiler / / Interpreter 00011010 0011 0100 Folie 27 Apr-05 Assemblersprachen Höhere Programmiersprachen 4GL-Systeme Alternative Sprachrichtungen ADD 3, 4 SUMME = 3 + 4 Beispiele für 3-GL-Sprachen I COBOL (COmmon Business Oriented Language) Entwicklung in den 50er Jahren betriebswirtschaftliche Anwendungen (Verarbeitung umfangreicher Datenbestände) meistgenutzte Programmiersprache auf Großrechnern Standard: ANSI-COBOL-85 FORTRAN (FORmula TRANslator) Entwicklung in den 50er Jahren von IBM technisch-wissenschaftliche Anwendungen (effiziente Programme für komplexe mathematische Algorithmen) Standard: FORTRAN 90 BASIC (Beginners All-Purpose Symbolic Instruction Code) Entwicklung in den 60er Jahren als vereinfachtes FORTRAN fehlende Unterstützung der strukturierten Programmierung führte zu Spaghetticode Weiterentwicklung (MICROSOFT) zur professionellen Makro- und Programmiersprache VISUAL BASIC (Visuelle Programmierung) Folie 28 Apr-05
Beispiele für 3-GL-Sprachen II C Entwicklung in den 70er Jahren in den Bell Laboratories des amerikanischen Telekommunikationskonzerns AT&T effizientes Laufzeitverhalten eng mit dem Betriebssystem UNIX verbunden (UNIX zu 90% in C geschrieben) universell einsetzbar auf allen gängigen Rechnern objektorientierte Nachfolger: C++ Makrosprachen Automatisierung von wiederkehrenden Abläufen innerhalb von Anwendungen (z.b. Textverarbeitung, Tabellenkalkulation) Proprietär: Der Befehlsumfang wird ausschließlich von einem einzigen Hersteller definiert bzw. weiterentwickelt zumeist herstellerspezifische Dialekte der Programmiersprache BASIC z.b. Visual Basic for Application (VBA) von MICROSOFT, LotusScript von LOTUS Folie 29 Apr-05 Beispiele für 3-GL-Sprachen III PASCAL 1971 von Prof. Niklaus Wirth an der ETH Zürich entwickelt benannt nach französischen Mathematiker und Philosophen Blaise Pascal (1623-1662) unterstützt die strukturierte Programmierung durch leichte Erlernbarkeit für Ausbildungszwecke geeignet geringe Verbreitung im Bereich kommerzielle Anwendungsentwicklung durch unkomfortable Ein- und Ausgabeanweisungen und unzureichende Dateiverarbeitung Nachfolger: MODULA 2 (modulare Programmierung) ObjectPascal (objektorientierte Programmierung) Delphi (visuelle Programmierung) Niklaus Wirth Blaise Pascal (1623-1662) Folie 30 Apr-05
Nicht-prozedurale Sprachen 4GL-Systeme (4. Generation) Folie 31 Apr-05 Deskriptive Programmierung Der Programmierer muss nicht mehr angeben, auf welche Weise ein Problem Schritt für Schritt gelöst werden soll, sondern er legt in beschreibender Form das Resultat fest, was geschehen soll. Beispiel: Prozedurale Variante: Sortieren einer Kundenliste Datenbanksprache Structured Query Language (SQL) SELECT Vorname, Nachname FROM Kunden WHERE Ort = Bochum ORDER BY Nachname 1. Gehe zum ersten Datensatz in der Tabelle Kunde 2. Solange noch nicht am Ende der Tabelle Kunde 2.1. Wenn Ort von jeweiligen Datensatz = Bochum 2.1.1. Dann Markiere den Datensatz 2.2. Gehe zum nächsten Datensatz 3. Kopiere von markierten Datensätzen Vorname, Nachname in eine temporäre Tabelle 4. Sortiere Datensätze der temporären Tabelle nach Nachnamen Proprietär, hohe Inanspruchnahme der Hardwareressourcen bei Umsetzung, beschränkter Anwendungsbereich Alternative Richtungen: Sprachen der künstlichen Intelligenz Folie 32 Apr-05 Sprachen der 5. Generation Anwendungsgebiete: Expertensysteme, Robotersteuerung, Data Mining Funktionale Programmiersprachen mathematische Funktionen auf Basis von Basisfunktionen (Aneinanderkettung, Iteration, Rekursion) LISP (LISt-Processing Language): 1958 am MIT (Massachusetts Institute of Technology) entwickelt grundlegende Struktur der Liste für Programme und Daten Logische Programmiersprachen Prinzipien der mathematischen Logik: aus Fakten und Regeln werden mit Hilfe der Prädikatenlogik neue Fakten gewonnen PROLOG (PROgramming LOGic): 1972 in Marseille entwickelt kaum Ablaufsteuerung, Verwendung von Deduktionsverfahren
Alternative Richtungen: Objektorientierte Programmierspr. Objekt Daten: beschreiben den Zustand des Objekts Methoden: beschreiben das Verhalten des Objekts Klassen: Objekte mit gemeinsamer Struktur und gemeinsamen Verhalten weitere Konzepte: einfache/mehrfache Vererbung, Polymorphismus Objektorientierte Programmiersprachen (OOP) Simula (1967), Smalltalk (1972), Eiffel (1988), Java (1995) Hybridsprachen C++ (1985), ObjectPascal (1985), Modula-3 (1985) Folie 33 Apr-05 Alternative Richtungen: Visuelle Programmiersprachen objekt- und ereignisorientierte Modellierung des optischen Erscheinungsbildes des Programms Kontroll-/Steuerelemente besitzen Eigenschaften (z.b. Farbe) und Ereignisse (z.b. Mausklick) den Ereignissen werden Ereignisprozeduren zugeordnet VISUAL BASIC von MICROSOFT DELPHI von BORLAND Folie 34 Apr-05
Gefragte Softwaretechnologien bei den IT-Kernberufen Softwareentwicklung / Programmierung IT-Organisation / IT-Projekte Netzwerke / Betriebssysteme Service / Support Datenbanken [CDI, Sept 2001] Folie 35 Apr-05 Gefragte Softwaretechnologien bei den IT-Mischberufen Multimedia E-Business / E-Commerce SAP CAD Kaufmännische Sachbearbeitung [CDI, Sept 2001] Folie 36 Apr-05