SlideShare une entreprise Scribd logo
1  sur  26
ProgrammierTrainer
„Ein guter Programmierer erkennt nicht
die Programmiersprache
sondern das Problem“
Projektteam
Betreuender Lehrer:
Dipl.-Ing. Harald HABERSTROH
Projektteam:
DINHOBL Erhard
REITERER Martin
Agenda
 Einleitung / Ausgangslage
 Was ist der ProgrammierTrainer?
 Aus welchen Teilen besteht der ProgrammierTrainer?
 Arten von Aufgaben
 Technologien & Realisierung
 Übersicht über meine zu realisierenden
Einleitung / Ausgangslage
Problem:
Programmieranfängern fällt es zu Beginn oft schwer,
sich den Ablauf eines Programms vorzustellen.
Grund:
Sie befassen sich mehr mit der Syntax der
Programmiersprache als mit dem Programmablauf.
Lösung:
Programmieren muss
programmiersprachenunabhängig erlernt werden
Was ist der ProgrammierTrainer?
Der ProgrammierTrainer ist ein Programm zum
Erlernen der Programmier-Technik.
Funktionalität:
 Benutzer muss eine Aufgabe lösen
 Aufgabe wird in Datei abgespeichert
 Verschlüsselung der Aufgabendateien ist möglich
 Lösen der Aufgabe durch das Erstellen eines Programm-
Algorithmus
 Benutzer benötigt keine Kenntnis über eine
Programmiersprache
 Erstellte Programm-Lösung kann automatisiert getestet werden
ProgrammierTrainer
Aus welchen Teilen besteht der
ProgrammierTrainer?
Der ProgrammierTrainer besteht aus zwei
großen Teilen:
 Interface zum Lösen einer Aufgabenstellung
(ProgrammierTrainer)
 Interface zum Erstellen einer
Aufgabenstellung (ExampleBuilder)
Arten von Aufgaben
Es gibt zwei verschiedene Arten von
Aufgabestellungen:
 E/A-Aufgaben: Entspricht dem Prinzip von
Konsole-Anwendungen
 Hamster-Aufgaben: Bei dieser Art von
Aufgaben muss ein Hamster in einer
Hamster-Welt gesteuert werden.
Technologien und Realisierung
Verwendete Technologien
 Java
 Embedded Python (Jython)
 XML (Aufgabendateien)
Programmierumgebung
 Borland JBuilder 9.0
Übersicht über meine zu realisierenden Teile
 Erstellen einer Aufgabendatei
 Verschlüsselung
 Automatisches Erzeugen von
Zufallsanweisungen
 Automatisches Zuordnen von Pseudo-Code-
Anweisungen
 Hamster-Steuerung & Anzeige
 Python-Editor
 Drucken
Abspeicherung einer Aufgabe
Abspeicherung:
 Aufgaben werden in Dateien abgelegt
 Die Dateien befinden sich im XML-Format
Inhalt:
 Aufgabenbeschreibung
 Musterlösung
 Hamster-Welt (bei Hamster-Aufgaben)
 Programmeinstellungen (Verfügbarkeit von
Hinweisen, …)
Verschlüsselungskonzept
… Aufgabendateien sollen verschlüsselt werden können …
Gewähltes Verfahren: DES (Data Encryption Standard)
DES:
 1974 von IBM entwickelt
 Schlüssellänge von 56 Bit  sicher
 Kann in akzeptabler Zeit nicht geknackt werden
 Relativ schnell durch Hardware-Unterstützung
 Nur wenige Angriffsmöglichkeiten (Brute-Force,
differenzielle und lineare Kryptanalyse)
Hamster
 Steuerung eines Hamsters mit einfachen
Befehlen (vor, linksUm, …)
Vorteil:
Der Benutzer sieht
sofort das Ergebnis seiner
Programmier-Tätigkeiten
Hamster (2)
Implementierung:
 Um den Hamster an den verschiedensten Stellen
einsetzen zu können wurde ein Hamster-Panel
entwickelt
 Panel wurde später zu einem eigenen Dialog
weiterentwickelt
 Dialog kann universell in Java und Python (Jython)
verwendet werden.
Das Ausführen von
Programmen
Autor: Erhard Dinhobl
Die Modi
 ausgelagert in einen Thread
1. normales Ausführen eines Programms
2. debuggen eines Programms
3. testen eines Programms
Das Ausführen
 Pseudocodeanweisung ist eigentlich
Pythonanweisung
 Zwischenanweisungen für Informationen
 Pythoncode + Zwischenanweisungen durch
Jython ausgeführt
 Jython
in Java implementierter Pythoninterpreter
Interaktion mit Benutzern
(Eingabe/Ausgabe und Hamster)
...
str = read(„Text:“)
...
print str
...
Ausgeführtes
Programm
def read(str):
return io.read(str)
# ... Methoden zur
# Steuerung des
# Hamsters
„initscript“
read(String s) {
...
}
/* ... Methoden zur
Steuerung des
Hamsters */
„io“-Objekt
Python Python Java
Jython
Ausgabelistbo
x
stdout
Wichtige Faktoren bei der
Ausführung
 bei Exception  Wo ist sie aufgetreten?
 anhalten beim Debuggen
 beenden eines Programms (Jython bietet
diese Möglichkeit von sich aus nicht)
 bei Endlosschleifen nach Timeout abbrechen
try:
...
trace.nextLine = ‚i = 1/0‘
trace.iLineNumber = 3
i = 1/0
...
except:
print ‚Fehler bei: ‘ + trace.nextLine + ‚@‘ + trace.iLineNumber
Auftreten einer Exception
trace.nextLine = ‚i = 1/0‘
trace.iLineNumber = 3
i = 1/0
4: i = 1/0 setze i auf 1/0
Python-Code Pseudo-Code
Ausführen
Analyse des Codes
Anhalten beim Debuggen
 Beispiel
trace.nextLine = ‚i = 12’
trace.iLineNumber = 5
trace.nextStep()
i = 12
wait() „nächste Anweisung“ notify()
Mechanismus zum Beenden
 Exception wird ausgelöst  except-Klausel
try:
...
trace.nextLine = ‚i = 12’
trace.iLineNumber = 5
trace.nextStep()
if trace.Exit == ‘True’:
raise ExitProgram
i = 12
...
except ExitProgram:
print ‚Program Aborted’
except:
print ‚Fehler bei ’ + trace.nextLine + ‚@’ + trace.iLineNumber
Abbruch von Endlosschleifen
weiterer Thread vor Ausführung
gestartet
bei Eingabe mit „read()“ Timeout
nicht weiterzählen
bei Ablauf des Timeouts 
ExitProgram-Exception
Das Testen
Programm
virtueller
Benutzer Eingaben Ausgaben
Prüfung
read()
Ablauf der Überprüfung für einen Test
TestDummy Ausgabe-
Prüfung
read()
String
print
bcheck1 = ‚true’
bcheck2 = ‚true’
Vergleich bestimmter Variablen
mit Endwerten der Aufgabendatei
JA NEIN
Test OK Test
Nicht OK
Sind
‚bcheck1’
und
‚bcheck2’
‚true’
ENDE
Danke für Ihre Aufmerksamkeit

Contenu connexe

Similaire à Was ist der ProgrammierTrainer!

Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Teambrandts
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.Stephan Schmidt
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenAndreas Schreiber
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxkaftanenko
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python Andreas Schreiber
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Rubyschlauch
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlungroskakori
 
Onno Reiners: E-Learning einfach selbst erstellen
Onno Reiners: E-Learning einfach selbst erstellenOnno Reiners: E-Learning einfach selbst erstellen
Onno Reiners: E-Learning einfach selbst erstellenlernet
 
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main Meetup
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main MeetupFlutter 101 - eine kleine Einführung - Flutter Rhein-Main Meetup
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main MeetupMarkus Kühle
 
Open Source und Free Software unter Windows
Open Source und Free Software unter WindowsOpen Source und Free Software unter Windows
Open Source und Free Software unter WindowsMartin Leyrer
 
Dart (Teil I der Tour de Dart)
Dart (Teil I der Tour de Dart)Dart (Teil I der Tour de Dart)
Dart (Teil I der Tour de Dart)Nane Kratzke
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Javacamunda services GmbH
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsAndreas Schreiber
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als CodeJan Gehring
 

Similaire à Was ist der ProgrammierTrainer! (20)

Einfuehrung Delphi
Einfuehrung DelphiEinfuehrung Delphi
Einfuehrung Delphi
 
Froscamp2010_padre
Froscamp2010_padreFroscamp2010_padre
Froscamp2010_padre
 
Software Entwicklung im Team
Software Entwicklung im TeamSoftware Entwicklung im Team
Software Entwicklung im Team
 
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
23 Dinge, die Sie über Software-Entwicklung in Teams wissen sollten.
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptx
 
Die freie Programmiersprache Python
Die freie Programmiersprache Python Die freie Programmiersprache Python
Die freie Programmiersprache Python
 
Tech-Talk: Python vs. Ruby
Tech-Talk: Python vs. RubyTech-Talk: Python vs. Ruby
Tech-Talk: Python vs. Ruby
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlung
 
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAYPLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
 
Onno Reiners: E-Learning einfach selbst erstellen
Onno Reiners: E-Learning einfach selbst erstellenOnno Reiners: E-Learning einfach selbst erstellen
Onno Reiners: E-Learning einfach selbst erstellen
 
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main Meetup
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main MeetupFlutter 101 - eine kleine Einführung - Flutter Rhein-Main Meetup
Flutter 101 - eine kleine Einführung - Flutter Rhein-Main Meetup
 
Open Source und Free Software unter Windows
Open Source und Free Software unter WindowsOpen Source und Free Software unter Windows
Open Source und Free Software unter Windows
 
Dart (Teil I der Tour de Dart)
Dart (Teil I der Tour de Dart)Dart (Teil I der Tour de Dart)
Dart (Teil I der Tour de Dart)
 
Web Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 BetaWeb Entwicklung mit PHP - Teil 3 Beta
Web Entwicklung mit PHP - Teil 3 Beta
 
PHP mit Paul Bocuse
PHP mit Paul BocusePHP mit Paul Bocuse
PHP mit Paul Bocuse
 
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source JavaJBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
JBoss jBPM und Drools - Geschäftsprozesse und Regeln mit Open Source Java
 
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-ToolsSoftware-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
Software-Engineering in der Luft- und Raumfahrt mit Open-Source-Tools
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 

Was ist der ProgrammierTrainer!

  • 1. ProgrammierTrainer „Ein guter Programmierer erkennt nicht die Programmiersprache sondern das Problem“
  • 2. Projektteam Betreuender Lehrer: Dipl.-Ing. Harald HABERSTROH Projektteam: DINHOBL Erhard REITERER Martin
  • 3. Agenda  Einleitung / Ausgangslage  Was ist der ProgrammierTrainer?  Aus welchen Teilen besteht der ProgrammierTrainer?  Arten von Aufgaben  Technologien & Realisierung  Übersicht über meine zu realisierenden
  • 4. Einleitung / Ausgangslage Problem: Programmieranfängern fällt es zu Beginn oft schwer, sich den Ablauf eines Programms vorzustellen. Grund: Sie befassen sich mehr mit der Syntax der Programmiersprache als mit dem Programmablauf. Lösung: Programmieren muss programmiersprachenunabhängig erlernt werden
  • 5. Was ist der ProgrammierTrainer? Der ProgrammierTrainer ist ein Programm zum Erlernen der Programmier-Technik. Funktionalität:  Benutzer muss eine Aufgabe lösen  Aufgabe wird in Datei abgespeichert  Verschlüsselung der Aufgabendateien ist möglich  Lösen der Aufgabe durch das Erstellen eines Programm- Algorithmus  Benutzer benötigt keine Kenntnis über eine Programmiersprache  Erstellte Programm-Lösung kann automatisiert getestet werden
  • 7. Aus welchen Teilen besteht der ProgrammierTrainer? Der ProgrammierTrainer besteht aus zwei großen Teilen:  Interface zum Lösen einer Aufgabenstellung (ProgrammierTrainer)  Interface zum Erstellen einer Aufgabenstellung (ExampleBuilder)
  • 8. Arten von Aufgaben Es gibt zwei verschiedene Arten von Aufgabestellungen:  E/A-Aufgaben: Entspricht dem Prinzip von Konsole-Anwendungen  Hamster-Aufgaben: Bei dieser Art von Aufgaben muss ein Hamster in einer Hamster-Welt gesteuert werden.
  • 9. Technologien und Realisierung Verwendete Technologien  Java  Embedded Python (Jython)  XML (Aufgabendateien) Programmierumgebung  Borland JBuilder 9.0
  • 10. Übersicht über meine zu realisierenden Teile  Erstellen einer Aufgabendatei  Verschlüsselung  Automatisches Erzeugen von Zufallsanweisungen  Automatisches Zuordnen von Pseudo-Code- Anweisungen  Hamster-Steuerung & Anzeige  Python-Editor  Drucken
  • 11. Abspeicherung einer Aufgabe Abspeicherung:  Aufgaben werden in Dateien abgelegt  Die Dateien befinden sich im XML-Format Inhalt:  Aufgabenbeschreibung  Musterlösung  Hamster-Welt (bei Hamster-Aufgaben)  Programmeinstellungen (Verfügbarkeit von Hinweisen, …)
  • 12. Verschlüsselungskonzept … Aufgabendateien sollen verschlüsselt werden können … Gewähltes Verfahren: DES (Data Encryption Standard) DES:  1974 von IBM entwickelt  Schlüssellänge von 56 Bit  sicher  Kann in akzeptabler Zeit nicht geknackt werden  Relativ schnell durch Hardware-Unterstützung  Nur wenige Angriffsmöglichkeiten (Brute-Force, differenzielle und lineare Kryptanalyse)
  • 13. Hamster  Steuerung eines Hamsters mit einfachen Befehlen (vor, linksUm, …) Vorteil: Der Benutzer sieht sofort das Ergebnis seiner Programmier-Tätigkeiten
  • 14. Hamster (2) Implementierung:  Um den Hamster an den verschiedensten Stellen einsetzen zu können wurde ein Hamster-Panel entwickelt  Panel wurde später zu einem eigenen Dialog weiterentwickelt  Dialog kann universell in Java und Python (Jython) verwendet werden.
  • 16. Die Modi  ausgelagert in einen Thread 1. normales Ausführen eines Programms 2. debuggen eines Programms 3. testen eines Programms
  • 17. Das Ausführen  Pseudocodeanweisung ist eigentlich Pythonanweisung  Zwischenanweisungen für Informationen  Pythoncode + Zwischenanweisungen durch Jython ausgeführt  Jython in Java implementierter Pythoninterpreter
  • 18. Interaktion mit Benutzern (Eingabe/Ausgabe und Hamster) ... str = read(„Text:“) ... print str ... Ausgeführtes Programm def read(str): return io.read(str) # ... Methoden zur # Steuerung des # Hamsters „initscript“ read(String s) { ... } /* ... Methoden zur Steuerung des Hamsters */ „io“-Objekt Python Python Java Jython Ausgabelistbo x stdout
  • 19. Wichtige Faktoren bei der Ausführung  bei Exception  Wo ist sie aufgetreten?  anhalten beim Debuggen  beenden eines Programms (Jython bietet diese Möglichkeit von sich aus nicht)  bei Endlosschleifen nach Timeout abbrechen
  • 20. try: ... trace.nextLine = ‚i = 1/0‘ trace.iLineNumber = 3 i = 1/0 ... except: print ‚Fehler bei: ‘ + trace.nextLine + ‚@‘ + trace.iLineNumber Auftreten einer Exception trace.nextLine = ‚i = 1/0‘ trace.iLineNumber = 3 i = 1/0 4: i = 1/0 setze i auf 1/0 Python-Code Pseudo-Code Ausführen Analyse des Codes
  • 21. Anhalten beim Debuggen  Beispiel trace.nextLine = ‚i = 12’ trace.iLineNumber = 5 trace.nextStep() i = 12 wait() „nächste Anweisung“ notify()
  • 22. Mechanismus zum Beenden  Exception wird ausgelöst  except-Klausel try: ... trace.nextLine = ‚i = 12’ trace.iLineNumber = 5 trace.nextStep() if trace.Exit == ‘True’: raise ExitProgram i = 12 ... except ExitProgram: print ‚Program Aborted’ except: print ‚Fehler bei ’ + trace.nextLine + ‚@’ + trace.iLineNumber
  • 23. Abbruch von Endlosschleifen weiterer Thread vor Ausführung gestartet bei Eingabe mit „read()“ Timeout nicht weiterzählen bei Ablauf des Timeouts  ExitProgram-Exception
  • 25. Ablauf der Überprüfung für einen Test TestDummy Ausgabe- Prüfung read() String print bcheck1 = ‚true’ bcheck2 = ‚true’ Vergleich bestimmter Variablen mit Endwerten der Aufgabendatei JA NEIN Test OK Test Nicht OK Sind ‚bcheck1’ und ‚bcheck2’ ‚true’
  • 26. ENDE Danke für Ihre Aufmerksamkeit