5.1. Programme history menue Letztmalig dran rumgefummelt: 04.05.19 11:37:05
Ein Programm ist die Umsetzung eines Algorithmus und der zugehörigen Datenbereiche in eine Programmiersprache. Während Algorithmen relativ allgemein beschrieben werden können, sind Programme wesentlich konkreter.
Nach DIN 44300 ist ein Programm eine „nach den Regeln der verwendeten Programmiersprache festgelegte syntaktische Einheit aus Anweisungen und Vereinbarungen, welche zur Lösung einer Aufgabe notwendige Elemente umfasst“. Eng mit dem Programm verknüpft sind Begriffe wie: Algorithmus, Daten, Datei, Variablen Datentypen, Resultate, Software.
Nicht unbedingt ist der Begriff des Programms an den Computer gebunden (wenngleich er heute meist damit im Zusammenhang zu sehen ist!!!), so gibt es Veranstaltungsprogramme, das Fernsehprogramm (wahrscheinlich das bekannteste), selbst der Fahrplan der Bundesbahn repräsentiert ein Programm eine Folge von Schritten (deren Ablauf) nach einer geplanten Reihenfolge.

0. Software-Life-Cycle
1. Programm-Definition
2. Programmzustandstabellen
3. Compiler und/oder Interpreter
4. Anforderungen an ein Programm
5. Programm-Dokumentation
6. Maschinenprogrammierung
7. Echtzeitverhalten und Echtzeitsysteme
8. Verwandte Themen

die Informatikseiten

Logo der Programme

begrenzt verwendbar - selbst aufpassen, ab welcher Stelle es Blödsinn wird ;-)

Wissen für Fortgeschrittene der Informatik

Informatik-Profi-Wissen

Quellen:
Haupteigenschaften von Programmen:
  • brauchen viel mehr Leute als da sind
  • brauchen viel mehr Zeit als da ist und werden nie pünktlich fertig
  • laufen nie auf Anhieb und stecken voller Fehler
  • machen was sie wollen, aber nicht, was sie sollen ... deshalb:
  • Der Entwurf eines Informatiksystems ist ein schöpferischer Vorgang. In seinen "Regeln zur Leitung des. Geistes" stellt der französische Philosoph Rene Descartes (1598 - 1650 ) folgende Maximen auf:
    • Übereilung und Vorurteil sind sorgfältig zu meiden.
    • jede der zu untersuchenden Schwierigkeiten ist in so viele Teile zu zerlegen als möglich und zur besseren Lösbarkeit nötig ist.
    • mit den einfachsten und fasslichsten Objekten ist zu beginnen und von da aus schrittweise zur Erkenntnis der kompliziertesten fortzuschreiten.
    • hinreichend vollständige Aufzahlungen und allgemeine Übersichten sind anzufertigen, um sicherzugehen, dass nichts vergessen wurde
    • dies sind allgemeine Regeln, die jedem Entwickler frommen. Wir erkennen in Descartes' Regeln zwei Prinzipien, nämlich
      • das Dekomponieren, d. h. Zerlegen eines Ganzen in Teile, und
      • das Abstrahieren, d. h. das Absehen von Details zugunsten des Allgemeinen.

Die konsequente Anwendung dieser Prinzipien führt zur Methode der schrittweisen Verfeinerung bzw. der strukturierten Programmierung oder aber der Methode Top-Down ;-)

Informationsbegriff für Anfänger

The Mother of Tetraed Codes - der HEX-Code

Stammbaum der Programmiersprachen


0. Software-Life-Cycle history menue scroll up

Der Software-Life-Cycle beschreibt das Verfahren von der Idee über die Formulierung der Teilprobleme bis hin zum test und zur Verifikation.

Software-Lifecycle bei Microsofts Entwicklung von Visual Studio 2005

ein und derselbe Algorithmus kann in verschiedenen Programmiersprachen geschrieben werden; er bildet eine Abstraktion aller Programme, die ihn beschreiben - das demonstrieren wir hier für einen sehr einfachen Algorithmus in verschiedenen Programmier-Plattformen:

Problem/Aufgabe

Lösungsalgorithmus

Programm

Berechnung der Summe aus drei und fünf

Verbale Beschreibung

Beschreibung durch ein Struktogramm

Programm in der gewählten Hochsprache

Programm in Maschinensprache für Prozessor Z 80

 1.

Lade den Akummulator mit der ersten Zahl

 

zahl_1:=3

3E, 03

 2.

Lade das Register B mit der zweiten Zahl

 

zahl_2:=5

06, 05

 3.

Addiere den Inhalt von Register A mit dem Inhalt von REGISTER B

 

summe:=8

86

 4.

Lege das Ergebnis auf den Speicher (wird durch HL adressiert)

 

 

 

 5.

Lies das Ergebnis in Register A

 

 

7E

2 Vom Problem bis zur Lösung

eine Ausarbeitung aus dem Jahre 1993 unter Mitarbeit von Schülern des Gymnasiums Flöha stellen wir hier vor (allerdings mit einer Größe von 2,059 MByte)


1. Definition history menue scroll up

Ein Programm enthält die für die für die Arbeit eines Datenverarbeitungssystems erforderlichen Arbeitsanweisungen in Form von Befehlen bzw. Anweisungen. Formal entspricht jedes Programm einem endlichen Algorithmus, durch den die zu lösende Aufgabe bis in die letzte Einzelheit eindeutig und für den Rechner nachvollziehbar beschrieben ist. Die auf einem Rechnern benutzten Programme werden eingeteilt in Systemprogramme (Betriebssysteme) und Anwendungsprogramme. Je nach Art der für die Programmierung verwendeten Programmiersprachen werden die Primärprogramme nach der Erstellung, die in einer symbolischen Porgrammiersprache erfolgt, in die Maschinensprache übersetzt, wobei durch Compiler Objektprogramme entstehen, die beliebig oft wiederholt werden können, während beim Einsatz von Interpretern mit der Übersetzung auch gleich die Ausführung erfolgt. soll hierbei mehrmals dasselbe Programm verwendet werden, so muss es jedes mal wieder gleichzeitig neu übersetzt werden. Hinsichtlich der Form, in der ein Programm vorrätig gehalten wird, unterscheidet man frei programmierbare Programme, die nach Belieben geändert werden können, und Festprogramme, die in Festspeichern enthalten sind, aber keine oder nur mit bestimmten Methoden mögliche Änderungen zulassen. Die Gesamtheit aller auf einem Rechner verwendeten frei programmierbaren Programme wird in der Programmbibliothek vorrätig gehalten, die sich auf einem externen Speicher befindet, von dem die jeweils benötigten Arbeitsprogramme in den Arbeitsspeicher geladen werden. Die Gesamtheit aller Programme wird mit dem Begriff Software bezeichnet.
einen ersten Versuch gibt's hier
Programme besitzen folgende Eigenschaften:
  • sie sind im exakt definierten und eindeutigen Formalismus einer Programmiersprache verfasst.
  • sie sind hinreichend detailliert (präzise in einzelnen Schritten)
  • sie nehmen Bezug auf eine bestimmte Darstellung der verwendeten Daten
  • sie sind auf einer Rechenanlage ausführbar
  • Ein und derselbe Algorithmus kann in verschiedenen Programmiersprachen geschrieben werden; er bildet eine Abstraktion aller Programme, die ihn beschreiben
ein und derselbe Algorithmus kann in verschiedenen Programmiersprachen geschrieben werden; er bildet eine Abstraktion aller Programme, die ihn beschreiben.
eine Ausarbeitung aus dem Jahre 1993 unter Mitarbeit von Schülern des Gymnasiums Flöha stellen wir hier vor (allerdings mit einer Größe von 2,059 MByte)


2. Zustände eines Programms history menue scroll up
Streng unterschieden werden muss hier unabhängig von der Programmiersprache, in welcher Form das Programm aktuell betrachtet jeweils gerade vorliegt. Das Entwicklungszeitraster ist etwas ganz anderes als das Compiler- oder gar das Laufzeitraster. Interpreter nehmen hier eine Zwischenstellung ein.

PASCAL 7.0-Programm im Quelltext (Entwicklungszeitpunkt)

PASCAL 7.0-Programm im Laufzeitmodus

Programmzustandstabellen Z80
Z80 Zustandstabelle komplett Z80 Zustandstabelle unvollständig Z80 Zustandstabelle stark vereinfacht Z80 Zustandstabelle stark vereinfacht als Textverarbeitung

Programmzustandstabelle Z80 vollständig

Programmzustandstabelle Z80 vollständig zum Download im CoreDraw 11.0-Format

Programmzustandstabelle Z80 unvollständig

Programmzustandstabelle Z80 unvollständig zum Download im CoreDraw 11.0-Format

Z80-Innenleben

Z80-Innenleben im CorelDraw 11-Format zum Download

Z80-Registerstruktur

Z80-Innenleben im CorelDraw 11-Format zum Download

  • setze FLAG-Bits mit 1 auf grün und inaktive Bits mit rot auf 0
  • Interruptfreigabe mit den Freigabe-Flip-Flop grün auf 1 und Interrupt somit gesperrt (Int frei mit rot für 0)
  • Standardregistersatz ist auf die Hauptregister gesetzt
  • I/O-Kanäle sind auf mögliche LC-80 Standards gesetzt
  • HALT-Befehl erkannt - aktiv grün
     

Programmzustandstabellen


3. Compiler und Interpreter history menue scroll up
Natürlich begeben wir uns hier ins Reich der heiligen Kühe (wieder mal). Natürlich einigen wir uns darauf, dass ein Compilersytem eine Mehrheit an Vorteilen bietet, dass aber ein interpretatives System eben auch seine guten Seiten hat - und, nun kommt's: Nutzen nicht auch Compilersyteme so etwas "Primitives" wie Breakpoints? Richtig ein interpretatives System, bis eine definierte Stelle erreicht wurde, oder diese nicht erreicht werden kann, da Fehler im Programm? Das übrigens Interpreter eine Reihe von Fragen offen lassen, liegt nicht an der Philosophie des Systems an sich, sondern daran, dass sie schlecht oder unbedacht bezüglich Worst-Case gemacht sind. Niemand hätte Bill Gates daran hindern können, einen Interpreter zu schreiben, in welchem auch die Variablen einschließlich ihrer Datentypen deklariert werden müssen.
Ist ein Übersetzerprogramm, der einen Programmtext in eine, dem Computer verständliche Sprache (Maschinensprache) übersetzt. Nach dem Lauf des Compilers liegt unser Programm genau zweimal im Hauptspeicher des Computers. Nämlich einmal als Quelltext, einmal als Maschinenprogramm. Das ist die Sprache, welche letztendlich als Befehl vom jeweiligen Prozessor verstanden und abgearbeitet werden kann. Ist die Hochsprache selbst frei für die jeweilige Plattform, so ist es der betreffende Compiler nicht mehr, denn er übersetzt direkt in die Zielsprache.
Das Gegenstück eines Compilers ist ein Interpreter. Hier werden jeweils Programmzeilen übersetzt und anschließend sofort ausgeführt. Das bringt insbesondere bei der Programmentwicklung Vorteile. Beide haben Vor- und Nachteile, wenn es allerdings um Geschwindigkeit geht, ist ein Compiler immer die effektivere Lösung.

4. Anforderungen an ein Programm history menue scroll up
Gut entwickelte Programme ...
  1.  ... lassen ihren Nutzer nie vor einem leeren Monitor sitzen, sondern informieren immer, was getan werden kann oder muss um weiterzukommen. Dabei ist die Menüführung eindeutig, überlegt sowie leicht überschaubar. Bei komplexeren Abläufen ist eventuell eine kontextbezogene Hilfe vorzusehen oder im einfacheren Fall sind fehlerhafte Eingaben mit Hinweisen versehen zu berichtigen (möglichst automatisch)
  2.  ... verfügen über eine logisch klare und minimal orientierte Datenvergabe.
  3.  ... fangen fehlerhafte Eingaben (Bereichsüberschreitungen, falsche Tasten, falsche Laufwerkszugriffe, Buchstaben statt Zahlen und umgekehrt usw.) mit entsprechenden Informationen für den Nutzer ab. Im Prinzip dürfen keine Laufzeitfehler auftreten. Siehe hierzu auch Worst-Case-Denken und den Oma-Test ;-)
  4. ... enthalten soviel Kommentare, wie Quelltext selbst! Wenn man 14 Tage nach Programmentwicklung als Programmierer nicht mehr versteht, was eigentlich der ablauftechnische Hintergedanke der Programmzeilen war, kann man das Ganze vergessen - dies führte zur Softwarekrise in den 70ern.
  5.  ... sind gut strukturiert und damit leicht lesbar - die Funktion jeder Variablen ist aus dem Listing entnehmbar (gegebenenfalls werden mögliche Werte der Variablen im Text notiert).
  6.  ... führen mit knappen, aber präzise formulierten Aussagen über den Monitor (orientieren Sie sich dabei an professioneller Software).
  7.  ... enthalten in jedem Programmblock eine kurze Information, welche Funktion er ausführt.
  8.  ... greifen auf Dateien niemals zerstörend zu - Fehlbedienungen sind abzuweisen.
    ... verwenden Farbe sparsam und mit Funktion - besonders eignen sich ansonsten blauer Hintergrund mit weißem Text (Hervorhebungen mit gelb betonen!).
  9. ... nutzen keine unnötigen Spielereien (Blinken, Ton usw.), sondern konzentrieren sich auf das versprochene Leistungsangebot, welches knapp als Eingangsmenü geboten werden sollte.
  10. ... bringen Sprunganweisungen nur nach vorn zur Anwendung, ansonsten (rückwärts) nur um Schleifen zu schließen. Jedes Programm verfügt über nur eine END-Anweisung.
  11. ... wenden sich immer an den „naiven“ Nutzer und schränken diesen so wenig wie möglich ein - bieten statt dessen selbst einen großen Leistungsumfang.
  12. ... sind wartungsfreundlich und nach oben offen - also überschaubar!
  13. ... sind modular aufgebaut und verwenden möglichst viele Subroutinen (Unterprogramme), welche klein und universell verwendbar sind.
  14. ... wechseln zwar Verzeichnisse, kehren aber nach Programmende selbständig in's Ausgangsverzeichnis zurück!
  15. ... erreichen in einer, dem Problem relevanten Abarbeitungszeit eine eindeutige und möglichst richtige Lösung!

Demgegenüber werden auch Sie nach kurzer Zeit feststellen, dass dies einfach und logisch klingt, jedoch gar nicht so einfach realisierbar ist!

 

5. Programm-Dokumentation history menue scroll up
Eines der wichtigsten Programm-Beschreibungsmöglichkeiten sind Ablaufpläne sowie Struktogramme.
     
  1. Nutzerdokumentation (auf gesondertem Blatt, zugleich als Bedienungsanleitung für den Einsatz, insbesondere für Fremdanwender)
 
  • Kurztitel des Programmes
  • Programmtitel
  • Kurzbeschreibung des Programmes mit folgenden Angaben:
    • Anwendungsbereich
    • Leistungsfähigkeit
    • Grenzen der Anwendbarkeit
    • Hinweise zur Genauigkeit
    • Angaben über Ein- und Ausgabedaten
    • Eingabedaten für Anwendungbeispiele
  • Hinweise auf andere Programme
  • Einsatzmöglichkeiten wie
    • Anwenderprogramm
    • Demonstrationsprogramm
    • Lehr- oder Übungsprogramm
  • Programmiersprache
  • Betriebssystem
  • Computertyp[en]
  • Speicherplatzbedarf (sofern festellbar und von Bedeutung)
  • Standort des Programmes
  • Autoren
  1. Programmbeschreibung für die Wartung
  1. Angaben zum verwendeten Algorithmus, zur verwendeten Literatur bzw. Software (ggf. mathematische Formulierung)
  2. Grobstruktur des Programmes (Grobstruktogramme zu Haupt- und Unterprogrammen)
  3. Besonderheiten des Programmes
  4. Testbeispiele
  5. Rechnerprotokolle
 
  1. Test- & Anwenderphase
   

6. Maschinenprogrammierung history menue scroll up

So zu sagen eine Extremsportart - auf der untersten Ebene genau so zu programmieren, wie der Mikroprozessor wirklich arbeitet. Das erzeugt die schnellsten Echtzeitsysteme, hat allerdings den entscheidenden Nachteil, dass man in der Hardware und Software-Entwicklung wirklich tief drin stecken muss. Solche Leute wurde vor Jahren noch immer weniger gebraucht, derzeit ist die Zahl wieder steigend, was durch den Einsatz von Microcontrollern bewirkt wird.
nur für ganz Ausdauernde zeigen wir hier, wie man die Maschinen-Programmierung erlernen kann und sich seinen maschinenprogrammierbaren Computer im Extremfalle selbst bastelt
       

Bonsai-Computer

der JOHHNNY-Simulator

MOPS - der universelle CPU-Simulator

Der Z80-Simulator

Der LC-80 Emulator zum direkten Starten

Assembler-Programmierung

   

der LC-80

POLYCOMPUTER

Z80-CPU

Mnemonic-Code-Notation

höhere Programmierwerkzeuge

... und so funktioniert ein Computer

 

die beliebte alphabetisch sortierte Schnell-Liste

die beliebte numerisch sortierte Schnell-Liste

Allgemeine FLAG-Wirkung

FLAG-Wirkung auf OP-Code-Gruppen

Alphabetisch sortierte Dokumentation

FLAG Teile I

FLAG Teile 2

Allgemeine Funktionssymbolik

Der LC-80 Simulator

Microcontroller

   


7. Echtzeitverhalten und Echtzeitsysteme history menue scroll up

Das ist eine Extremforderung an Software, welche mit genau dafür zugeschnittener Hardware ein Maximum an Effizienz, ein Minimum an Redundanz und damit wiederum ein Minimum an Rechenzeit zu erreichen sucht. Es gilt hier, in extrem kurzer Zeit auf Ereignisse von außen angemessen zu reagieren (also auch nicht über zu reagieren). Echtzeitsysteme haben wir zu Hause, in der Industrie, der Weltraumfahrt - überall dort, wo extrem schnell auf Einflüsse reagiert werden muss.
 


8. Verwandte Themen history menue scroll up

Programme sind neben der Hardware wohl die wichtigste und so ganz nebenbei auch teuerste Komponente beim Computereinsatz. Gern wird dieser Umstand vernachlässigt und in Größenordnungen wird geklaut. Dabei ist ein Unrechtsbewusstsein in Deutschland kaum ausgeprägt und folgerichtig ist Software in Deutschland um Größenordnung teurer als in umliegenden europäischen Staaten.
Bereich höhere Programmiersprachen

Worst-Case-Denken

ASide-Assembler

 
Bereich Datenfernübertragung

Datenübertragungsverfahren

OSI Referenz-Schichtenmodell

die RS232-Schnitttstelle

Tabelle des UNICODES

Kryptologie

Digitale Signale

Information, Nachricht und Signalbegriff

 

   
Bereich Netzwerke und Datensicherheit

Secuirty-Syteme in Netzwerken

Server-Management

Local Area Network - kurz: LAN

Netzwerkdienste

Netzwerk-Management

OSI Referenz-Layer

Netzwer-Topologie

Terminalserver

 
Anfängerbereich Informatik

Computer für Anfänger

Computertechnik

Mikroprozessor und Peripherie

Netzwerke für Anfänger

Standardsoftware

Betriebssysteme

Software-Lifecycle

   
Bereich Pädagogik & Informatik

Informatikunterricht

Leitlinien und Prinzipien des Informatikunterrichts

Paradigmen des Informatikunterrichts

Pädagogik, Fachdidaktik sowie Methodik der Informatik

Medienkompetenz oder informatische Bildung

Informatik-Projekte am Gymnasium Flöha

Bereich Programmierungstechnik

Programmierung

Programmiersprachen

Software-Engeneering

Datentypen - sind ja auch besond're Typen gewesen ;-)

Struktogramme

EVA-Prinzip & Objekt-, Attribut-, Operatiosnbeziehung

Modultechnik

Intel-Interrupts

 
Bereich Rechentechnik und Betriebssysteme

Computergeschichte

von-Neumann-Architektur

Logo der Parallelrechnersystemee

Betriebssysteme

   



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost im Oktober 2007

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist

Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-)