JAVA, C++, Delphi - IT-Klasse
-
In gemeinsamer Kooperation ist es uns endlich gelungen eine lehrbuchgemässe
Version des "Primzahl"-Programmes zu erstellen.
-
ich fürchte, es waren die MISRA-regeln. http://www.ida.liu.se/~snt/teaching/SCRTS/MisraSoftwareGuidelines[1].pdf
das les ich jetzt mal...
november 1994. gabs da schon c++?
zwischenstand: bis seite 12 nur buzzwords und bilder.
zwischenstand: bis seite 50 isses ein proposal für case-tools.
auf seite 56 fangen coding guidelines an.
5.3.6 ist lustig.
aber singe-entry/single-exit steht da nirgends.
waren wohl doch nicht die MISRA-regeln.
-
volkard schrieb:
bool istPrim(unsigned int kandidat){ if(kandidat<2) return false; if(kandidat%2==0) return false; for(unsigned int teiler=3;teiler*teiler<=kandidat;teiler+=2) if(kandidat%teiler==0) return false; return true; }
bool istPrim(unsigned int kandidat) { bool result; if (kandidat < 2) result = false; else if (kandidat % 2 == 0) result = false; else { bool looping = true; for (unsigned int teile = 3; looping && teiler*teiler <= kandidat; teiler += 2) { if (kandidat % teiler == 0) { looping = false; result = false; } } result = true; } return result; }
Nicht übermäßig häßlich. Ich frage mich, was du damit aussagen wolltest.
EDIT: Ich hab mal einfach deine Funktion nachprogrammiert. Normalerweise ist mir Korrektheit (2 ist prim!) minimal wichtiger als Stil
-
Ich spreche von einer 11. Klasse.
-
Bashar schrieb:
Nicht übermäßig häßlich. Ich frage mich, was du damit aussagen wolltest.
aber schon beachtlich häßlich. und zwar als direkte folge der "single-entry/single-exit"-forderung. ich denke, ich konnte zeigen, daß die "single-entry/single-exit"-forderung den code verschlechtern kann. außerdem gibt es keinen grund mehr für diese forderung.
also ein ding ganz ohne vorteile aber mit gelegentlichen nachteilen. weg damit.
-
volkard schrieb:
aber schon beachtlich häßlich. und zwar als direkte folge der "single-entry/single-exit"-forderung. ich denke, ich konnte zeigen, daß die "single-entry/single-exit"-forderung den code verschlechtern kann.
IMHO konntest du das nicht. Dass die Anweisungen zum Führen des Kontrollflusses bei SESE etwas mehr Raum einnehmen, ist ja bekannt. Und ich bin noch nichtmal Verfechter von SESE, wie willst du also mit so einem Beispiel überhaupt irgendwen überzeugen?
volkard schrieb:
außerdem gibt es keinen grund mehr für diese forderung.
Wenn es je einen gab, warum gibts den dann nicht mehr?
-
Bashar schrieb:
IMHO konntest du das nicht. Dass die Anweisungen zum Führen des Kontrollflusses bei SESE etwas mehr Raum einnehmen, ist ja bekannt.
raum? der ist eher egal. inhaltlich ist die funktion schlimm (abgesehen von meinem fehler).
bool istPrim(unsigned int kandidat) { bool result;//uninitialisiert if (kandidat < 2) result = false;//und nu? ein return false sagt eindeutig und klar: //jup, das ergebnis ist berechnet und false wird zurückgeliefert und //nix passiert in dieser funktion mehr. also eine neue stil-forderung //ist entstanden: "sobald ein funktionsergebnis berechnet wurde, muß //das sofort rausreturnt werden". else if (kandidat % 2 == 0) //dieses und das folgende else sind nur platz. naja, fast. die einzelnen //tests sind nicht mehr so unabhängig. result = false; else { //ganz seltsame variable namens looping. bool looping = true; //seltsame laufbedingung //sollte ich erwähnen, daß das auch speed kostet? nee, willste nicht haben, das //argument. for (unsigned int teile = 3; looping && teiler*teiler <= kandidat; teiler += 2) { if (kandidat % teiler == 0) { looping = false; result = false; } } result = true; } return result; }
Und ich bin noch nichtmal Verfechter von SESE, wie willst du also mit so einem Beispiel überhaupt irgendwen überzeugen?
ich versteh nicht, warum du den SESE-code nicht für total häßlich hältst.
Wenn es je einen gab, warum gibts den dann nicht mehr?
weil wir sutter gelesen haben und exceptionsicheren code bauen. falls die funktion SESE braucht, dann wegen close oder delete oder sowas am exit-point. so code ist aber sicher nicht exceptionsicher. machen wir ihn sicher durch destruktoren, und wenn's als auto_ptr ist, dann gibt es keinen grund für SESE mehr. da die funktion überall durch eine exception verlassen werden kann, kann sie auch überall durch return verlassen werden.
-
das
result = true;
sollte vor die schleife, nehm ich an. womit dein nächstes argument wegfällt, daß jede zuweisung an result gelesen werden darf wie ein return.
-
da es sonst noch niemand gesagt hat, tu ich's eben:
wie waer's mit Python?
Vorteile:
* kein Kompilieren und Linken noetig (d.h. eine typische Anfaengerfehlerquelle weniger)
* einfachere Syntax als C & Co. (wieder eine tyiche Anfaengerfehlerquelle weniger)
* moderne Sprache
Multiparadigmasprache: funktional, OO, prozedural... bietet mehr didaktischen Freiraum
* gratis (besonders bei ObejctPascal koennt ich mir vorstellen wie wieder mal x Schueler sich mal eben wieder Delphi raubkopieren)
* "batteries included": man kann damit mehr machen ohne erst lang Zusatzlibs zu installieren (ist wohl nur gegen C++ ein Argument, aber trotzdem)
-
Python kann der Lehrer nicht.
-
Python ist schon cool, aber den Umstieg von Python auf C++ stelle ich mir ziemlich fies vor.
-
Blue-Tiger schrieb:
wie waer's mit Python?
wenn sowas auch gilt, ist doch ruby sofort angemessener.
-
Hmm, also wie ich programmieren gelernt habe:
Ungefähr 6 Klasse: 1 Jahr lang privat VBA gelernt (rückblickend guter Einstieg aber schlechte Lektüre erwischt, so ein „in 21 Tagen“ Buch)
8 Klasse 1. Halbjahr: Programmierbaukasten (leicht zu verstehen, vor allem da ich schon VBA halbwegs konnte und schnelle Erfolge (nach 4 Monaten Schulunterricht hatte jeder sein eignes Programm erstellt, bei mir einfacher Moorhunclone)
9 Klasse 1. Halbjahr: HTML 2. Halbjahr Javascript
10 Klasse (leider nur noch Einstündig): Java
Demnach würde ich VBA als Einstieg empfehlen
Ps: Bitte kein Falmeware alla HTML ist doch eh keine Programmiersprache oder Programmierbaukästen sind nur was für Skriptkiddys
-
volkard schrieb:
Und ich bin noch nichtmal Verfechter von SESE, wie willst du also mit so einem Beispiel überhaupt irgendwen überzeugen?
ich versteh nicht, warum du den SESE-code nicht für total häßlich hältst.
Ich finde ihn häßlich, aber nicht so übermäßig, dass mich das überzeugen würde, wenn ich SESE für eine gute Idee halten würde.
Wenn es je einen gab, warum gibts den dann nicht mehr?
weil wir sutter gelesen haben und exceptionsicheren code bauen. falls die funktion SESE braucht, dann wegen close oder delete oder sowas am exit-point. so code ist aber sicher nicht exceptionsicher. machen wir ihn sicher durch destruktoren, und wenn's als auto_ptr ist, dann gibt es keinen grund für SESE mehr. da die funktion überall durch eine exception verlassen werden kann, kann sie auch überall durch return verlassen werden.
Da brauchst du gar nicht bis Sutter ausholen. Code, der Exceptions nutzt, ist im Allgemeinen prinzipiell nicht SESE.
Was hältst du hier von (das ist nach echtem Code):
int foobar() { int result = 0; if (f) { result = blablub ... if (result) { result = blublub ... if (result == 1) { if (was anderes) { Buffer = malloc(irgendwas); if (Buffer) { result = blubdiwub if (result == l) { blabla if (quux) { .... } else { // handle error ... } } else { // handle error ... } free(Buffer); } else { // handle error ... } } //etc.
Da hat jemand SESE zur obersten Maxime gemacht und sich nichts dabei gedacht, dass der Code nicht mehr schmerzfrei lesbar war.
-
Hi
Sorry mein Fehler. Hab mich verschrieben es sind die MISRA regeln. Das Document das du gefunden hast meinte ich eigentlich nicht. Es gibt auch ein Regelwerk speziel für c. C ist nicht C++ somit nicht vergleichbar und mein Fehler.
Ich persönlich find SESE eine nette Idea die ihre daseinsberechtigung hat. Das wichtigste sollte aber sein das der Code lesbar bleibt.
gruss Termite
-
Also da ich auch mal Info-Grunzkurs hatte, hier mal meine persönlichen Erfahrungen:
Wir haben angefangen mit Delphi, das wir bis zum Ende der 12. gemacht haben wenn mich net alles trügt. Dann Lehrerwechsel und die Frage was machen wir, einer (Schüler) schlug html vor, der Lehrer wollte bissl Linux-Grundlagen machen, irgendwer erwähnte Applets und weil ich auf den ganzen Webkrams keinen Bock hatte hab ich dann nur Java durchgeboxt, irgendwie... (Ich hatte vorher schon n guten Batzen Progerfahrung, u.a. Java)
Wie schlug sich also der Grunzkurs in den Disziplinen Delphi und Java?
Delphi:
Grausam, einfach grausam... Angefangen mit der Tatsache das 90% der Schüler 90% ihrer Zeit mit dem herumschieben und basteln von schicken Fenstern beschäftigten, um dann ihren "button_click" Source von irgendwem zu kopieren oder von Vorlagen abzutippen, hin zur totalen verstümelung von Quelltext (ich durfte ja als etwas Fähigerer helfen). Naja, ich glaube in den 2 Jahren oder so hat nur durch Delphi + Unterricht keiner was gelernt, nichtmal den Segen den tab bringen kann...
Java:
Da wir in Java keine GUI's gemacht haben, sondern alles über Konsole wars hier schon etwas besser... Ich hab zwar n referat am Anfang zu OOP gehalten, aber das hat eigentlich nur gezeigt, dass das Thema recht anspruchsvoll ist vom Konzept herPersönlich würd ich sagen nehmt Python (hab das vor n paar Tagen entdeckt als ich mich mit bash-scripts beschäftigt hatte (#!/usr/bin/python)), das ist recht einfach zu erlernen und die bessere variante zu Beginn als qbasic (damit hab ich auch mal angefangen!), und wenn Python rausfällt, hm, schwierig...
Ich würd glaub ich Java empfehlen... Wenn man OOP einigermaßen erklärt, kann man da wohl noch am meisten bei lernen...
-
Jap Python ist ne sehr feine Sprache, schau ich mir gerade selbst so nebenher an.
Das dumme ist nur, dass ich Python gerne für kleinere Tools einsetzen würde, aber meist greif ich doch auf C++ zurück da ich für Python extra nachschlagen müsste.
Aber das Problem betrifft natürlich nicht jeden *g*
-
Jo, das Nachschlagen bzw angewöhnen einer neuen Lib ist mir auch bissl nervig... da fehlt mir derzeit einfach der Biss... Werd mir wohl irgendwann Lektüre dafür zulegen müssen...
-
Termite schrieb:
Hi
Hab mich verschrieben es sind die MISRA regeln. Das Document das du gefunden hast meinte ich eigentlich nicht. Es gibt auch ein Regelwerk speziel für c.
gruss TermiteWeißt du überhaupt wofür die MISRA Regeln geschaffen wurden? Die gehören nicht in normalen PC Bereich! Die werden vor allen in automobiler Software eingesetzt weil es da wirklich um Sicherheit geht, und da bietet C von Haus aus ja viel Möglichkeiten um was falsch zu machen
Zeig mir mal bitte einen aktuellen C Compiler/Linker der den Misra Standard unterstützt und für Windows oder Unix Code erzeugt. Gibts meiner Meinung nach kaum einen *gg* Abgesehen davon sind alle Regeln eh net einzuhalten da man extremst in seiner künstlerischen Gestaltung eines Programms gehindert wird.
-
Jetzt hab ich gar nichts zum eigentlichen Thema gesagt
Ich würde ohne Bedenken Java empfehlen! Die Sprache ist leicht zu erlernen und bietet keine arg großen Schwierigkeiten, wenn der Lehrer es ordentlich rüberbringt müssten selbst Ahnungslose was lernen.
Was ich damals bei uns gut fand als wir in der 11. Klasse angefangen haben zu programmieren, war, dass wir erstmal bestimmt ein viertel Jahr nur theoretische Programmierung hatten. Alles Sprachunabhängig und ging darum wie Programmieren allgemein funktioniert, Konzepte ( auch OOP! ), Designmöglichkeiten usw. Im Prinzip wars echt so das wir theoretisch programmieren konnten ohne was gesehen zu haben und als es dann anfing eine spezifische Sprache zu lernen war das kinderleicht! Wir haben zwar C++ statt Java gemacht, aber egal. Es war wirklich nur noch das man das was man theoretisch wusste in die richtige Syntax bringt und schon funktioniert alles! Dann versteht man auch sprachspezifische sehr leicht weil man den Sinn dahinter leichter versteht. Mittlerweile hass ich C++(VB.Net gerade noch viel mehr weils keine unsigned Datentypen gibt *aaarggghhh*) aber das ist eine andere Geschichte *gg*