# geeignete Java-Projekte für Schüler (Einsteiger)



## Auswanderer (15. Aug 2012)

Hallo zusammen,

kurz etwas zu mir: Ich bin eigentlich Mathelehrer und kein Infolehrer, habe aber Info mal als Nebenfach studiert und eine gewisse Programmiererfahrung. Daher hat mir meine neue Schule die Aufgabe übertragen, eine Klasse in Informatik zu unterrichten. Ist viel Einarbeitung, aber okay.

Ich werde mit meiner Klasse Java durchnehmen (deswegen bin ich hier.) Am Anfang werden wir uns dazu bereits erstellte Java-Projekte anschauen. Aber Ziel ist natürlich, dass die Schüler selbst lernen, Projekte zu erstellen. Jetzt frage ich mich, an welchen Projekten ich sie das üben lassen könnte.

Hat jemand evtl eine gute Idee, was ich den Schülern für ein Thema vorgeben könnte? Ich stelle mir das so vor: Ich sage einfach nur: Modelliert Projekt X. Dann sammeln wir gemeinsam Ideen, welche Objekte man für das Projekt X braucht, und später lasse ich die Schüler das in Zweiergruppen implementieren. Mir fällt nur kein geeignetes X ein. Es sollte natürlich schon lehrreicher als "Hello World" sein, aber nicht zu umfangreich. Am Besten irgendetwas, was sich auf natürliche Weise aus zwei oder drei Objekten modellieren lässt. 

Also, wie gesagt: Für Ideen bin ich dankbar.


----------



## KingOfExceptions (15. Aug 2012)

Du kannst dir mal das hier angucken, das ist von einem Professor gemacht und eigentlich für Schüler ganz gut. So habe ich auch mal angefangen. Sicherlich kann man einige Kapitel weglassen oder kürzer fassen(zB Kapitel 1-4).
Die Programmieraufgaben am Ende jeder Aufgabe sind vielleicht ganz hilfreich für dich.

Richtig mit Objekten geht es dann erst bei Kapitel 25-30, die haben mehr etwas von kleinen Projekten. 
Außerdem noch von mir kleine Tipps, die kann man dann je nachdem immer erweitern, mit zB einer DB oder XML-Dateien, Highscore, SWING, AWT etc.

-Chat-Programm(/!\ Sockets!)
-Adressbuch
-Schiffe versenken
-Bildschirmtastatur(/!\ SWING!)


----------



## tuttle64 (15. Aug 2012)

Was mir spontan einfällt ist eine kleine Bibliothek. Mit den Klassen Buch, Person und Bibliothek hat man schon die Hauptobjekte des Projektes beisammen. In meiner Signatur findest Du Video Tutorials, die sich genau diesem Problem widmen, auf englisch.


----------



## bone2 (15. Aug 2012)

Oder zeitgemäßer eine Videothek. Okay die sind auch tot.
Lagerhaltung aller Amazon!
Kunden, Bestellungen, Artikel

Kunden haben Adressdaten
Bestellungen haben eine Liste von Artikel und praktischerweise zB eine Methode getGesamtPreis(), abschicken(), stornieren() usw
Artikel haben einen Preis, Lagerort, Anzahl


----------



## Landei (15. Aug 2012)

Natürlich ein Spiel, was sonst? Am besten irgend etwas rundenbasiertes. Ein großer Vorteil ist, dass man immer "mehr" machen kann:  Von Konsolenausgabe zu richtiger Grafik, von zwei menschlichen Spielern zu AI u.s.w. Und es wird sicher mehr Konkurrenz zwischen den Teams geben, als wenn man eine Lagerhaltung implementiert. Wenn man sich vorher auf gemeinsame Interfaces einigt, kann man am Ende die verschiedenen AIs gegeneinander antreten lassen - wenn das keine Motivation ist...

Ach ja, und bitte kein BlueJ verwenden. Das Forum hatte schon genug Anfragen von Schülern, die daran verzweifelt sind...


----------



## Fab1 (15. Aug 2012)

Hallo,

vielleicht ist ja hieretwas dabei.

Ich finde es super, dass ein Lehrer im Forum nach passenden Aufgaben sucht, denn meist sind die Aufgaben der Lehrer alles, aber nicht lehrreich. Zumindest zeigten das meine Erfahrungen. 

Ansonsten wird an Schulen ja immer so ein Klassentagebuch geführt, in welchem steht welcher Lehrer wann was unterrichtet hat. Welche Schüler krank sind. Und so weiter, dieses könnte man natürlich auch in einem Programm abbilden. Zumindest hätte man somit als Schüler eine Vorstellung wie so etwas aussehen soll, bzw. welche nutzen es hat. Die Daten könnten anfangs in einer CSV gespeichert werden. Im Laufe der Zeit könnte man das in eine DB auslagern. Denke das würde sich viel mit machen lassen.


----------



## bone2 (15. Aug 2012)

Landei hat gesagt.:


> Natürlich ein Spiel, was sonst?


Uh, auf sowas komme ich nie wenn ich auf Arbeit an Schule denke. Ein Spiel ist sicherlich die interessanteste Wahl!


----------



## CHAOSFISCH (15. Aug 2012)

Warum muss es denn Java sein?
Wenn den Schülern wahrscheinlich nicht mal eine "gescheide" Übungsumgebung für zu Hause gegeben werden kann und Hausaufgaben selten sind und sich dadurch auch noch die Frage stellt, ob diese deswegen überhaupt gemacht werden können, dann eignet sich Java einfach nicht!
Die Projekte sehen dann so aus, dass die Aufgabenstellung von 1-2 fähigen Schülern innerhalb kürzester Zeit (1-2 Schulstunden) fertiggestellt sind und diese haben somit nichts mehr zu tun.
Der Rest der Klasse erreicht über das gesamte Jahr nicht annähernd Erfahrungen mit Java / der Programmierung.

Bei einer Klassengröße von evtl. 15 ist es möglich eine Programmiersprache zu lehren, praktische Erfahrungen haben bei mir aber gezeigt, dass bei 30 Schülern, welche dieses Fach nicht freiwillig belegen, ein Lernerfolg nicht zu verzeichnen ist. Da wird sich im Unterricht gern die Zeit mit anderen Dingen vertrieben, die IDE's die verwendet werden sind 10 jahre alt und damit schrott, die Editoren besitzen teils nicht mal Syntax-Highlighting, autocomplete oder "Fehler-Anzeige".

Dies sind einige Hürden die aus dem Weg geschaffen werden müssen, erst dann kann dies hier funktionieren.

Als Projekte eignet sich einiges, sein es "Supermarkt" mit Kasse Artikel + beliebiger Erweiterung, eine Bücherrei, Videothek, Versandhandel, Autohändler...
Solange die Projekte dann sinnvoll bearbeitet werden können, sollte dies kein Problem darstellen.

Mir bleibt aber jetzt noch dazu die Frage: Was lernen die Schüler dabei?
Bei mir war das bisher immer so: Einer macht die Arbeit, der Rest Copy&Paste. Gelernt wurde dabei nichts.
Jemanden die Aufgabe zu geben: Du programmierst jetzt einen Supermarkt, funktioniert auch nicht, wenn derjenige keine Programmierkenntnisse hat. Allein das Wissen wie man Klassen erstellt, was Klassen sind, was Objekte sind und wie man dies alles verwendet ist schwer zu lehren. 
Das Problem liegt primär in OOP selbst. Es stellt einem anfänglich große Hürden auf Grund der hohen Komplexität die sich ergeben kann.

Ich kann daher immer noch nur empfehlen eine nicht OOP abhängige Sprache als Einstieg zu nutzen. PHP (obwohl keine Programmiersprache, sondern Scriptingsprache) eignet sich. Die Schüler müssen primär den ganzen OOP "Schrott" nicht wissen und können selbst Erfahrungen sammeln und erst diese eignene Erfahrungen bringen sie weiter. Von PHP kann ab einem gewissen Wissensstand problemlos auf z.B. Java ge"upgradet" werden und ab jetzt bringt auch OOP was.
PHP bietet zudem auch die Möglichkeit Hausaufgaben bzw. Übungen daheim durchzuführen, denn dies ist weit einfacher für einen normalen Schüler, als sich mit Java herumzuschlagen. Durch kostenlose Anwendungen wie XAMPP sollte zudem jeder Schüler in der Lage sein, sich eine vernünftige Testumgebung zu installieren, die auch läuft.

PHP Hello World:

```
<?= "Hello world"; ?>
```
Java Hello World:

```
public class HelloWorld
{
  public static void main(String[] args)
  {
    System.out.println("HelloWorld");
  }
}
```

Der unterschied ist einfach schon sehr krass. Ein Schüler kann z.B. nichts mit den Wörtern: "public, class, static, void, main" anfangen, dann was ist String[] - warum nicht String?

Allein das HelloWorld-Beispiel ist für Schüler schon eine Herausforderung.

Sollte deine Wahl daher bei Java bleiben, bzw. muss Java gelehrt werden, dann wartet viel arbeit auf dich mit nur geringen Chancen auf Lernerfolg.

Gruß
CHAOSFISCH


----------



## Landei (15. Aug 2012)

Da wir schon öfter solche Diskussionen hatten, nur ganz kurz: Dass Java als besonders gute Lehrsprache angesehen wird, kann ich auch nicht ganz nachvollziehen, aber ausgerechnet PHP als Alternative anzubieten, ist schon etwas kühn. Die Inkonsistenz von PHP (insbesondere die völlig unintuitiven Typumwandlungs- "Regeln") ist meiner Meinung nach ein absolutes K.O.-Kriterium. Um es klar zu sagen: Nichts gegen PHP, man _kann_ sehr ordentlichen und verständlichen PHP-Code schreiben, aber nicht als Anfänger.


----------



## Paddelpirat (15. Aug 2012)

Also als ich Informatik in der Schule hatte, haben wir uns auch erst Perl und Sachen wie Niki den Roboter angeguckt, um ein Gefühl für Computersprachen und Schleifen zu bekommen.
Später kam dann Java bei einer Kursgröße von ca 15 Schülern. Da haben wir hauptsächlich einfache Such- und Sortieralgorithmen implementiert. Sowas kann man auch später wieder verwenden, falls man Informatik studiert.
Ein Projekt haben wir damals erst in der letzten Klasse der Oberstufe absolviert mit einer handvoll Schülern die noch übrig geblieben sind und die alle (weil sie persönliches Interesse daran hatten) mehr oder weniger programmieren konnten.


----------



## CHAOSFISCH (15. Aug 2012)

Landei hat gesagt.:


> Da wir schon öfter solche Diskussionen hatten, nur ganz kurz: Dass Java als besonders gute Lehrsprache angesehen wird, kann ich auch nicht ganz nachvollziehen, aber ausgerechnet PHP als Alternative anzubieten, ist schon etwas kühn. Die Inkonsistenz von PHP (insbesondere die völlig unintuitiven Typumwandlungs- "Regeln") ist meiner Meinung nach ein absolutes K.O.-Kriterium. Um es klar zu sagen: Nichts gegen PHP, man _kann_ sehr ordentlichen und verständlichen PHP-Code schreiben, aber nicht als Anfänger.



Gut, PHP ist sicher nicht perfekt, aber immer noch besser als Java, wenn man keine Erfahrungen hat.
PHP - so wie ich es meinte - ermöglicht eine schnelle Einarbeitung und Entwicklung von Erfahrungen im Umgang mit Schleifen, Bedingungen etc. Die Typumwandlungsregeln kann man dann (meiner Meinung) vernachlässigen, denn als Anfänger braucht man die Erfahrungen und Erfolge.

Von mir aus kann man auch jede andere Sprache nehmen, die dann noch halbwegs eine Syntax wie Java / C# hat, aber gleichzeitig halt diesen OO aspekt nicht zwingend benötigt.


----------



## mc (15. Aug 2012)

Warum nicht Python? Das ist erheblich sauberer und einsteigerfreundlicher als dieser inkonsistente PHP-Murks. Und warum im Info-Unterricht unbedingt eine C-Syntax-Sprache genommen werden woll, ist mir auch etwas schleierhaft. Gerade für Anfänger sind klare Sprachen ohne viel syntaktisches Rauschen doch viel besser zum Lesen und Lernen.


----------



## parabool (15. Aug 2012)

Spiel ist gut. 
Vielleicht sowas in der Art: Gorillas (video game) - Wikipedia, the free encyclopedia
Nicht zu komplex und n' bisschen Mathe dabei.


----------



## BRoll (15. Aug 2012)

Also was mir spontan einfällt, was wir
im Computertechnik mit Java gemacht haben war das:

Am Anfang nur eine Konsolenanwendung, dann auf Applets umgestiegen.

Projekte waren oft mit kleinen mathematischen Problemen verknüpft:

zb. Ausgabe von Primzahlen, einen Kilometerzähler mit Spritpreis usw,
Lotto Wahrscheinlichkeit ausrechnen mit gegebenen Startkugeln,
Fakultät ausrechnen, einen Ball im Fenster herumhüpfen lassen....

Wenn ich den alten Schulordner finde kann ich noch viel mehr
Beispiele auflisten, hab ihn aber grad nicht parat.


----------



## Landei (15. Aug 2012)

CHAOSFISCH hat gesagt.:


> Gut, PHP ist sicher nicht perfekt, aber immer noch besser als Java, wenn man keine Erfahrungen hat.
> PHP - so wie ich es meinte - ermöglicht eine schnelle Einarbeitung und Entwicklung von Erfahrungen im Umgang mit Schleifen, Bedingungen etc. Die Typumwandlungsregeln kann man dann (meiner Meinung) vernachlässigen, denn als Anfänger braucht man die Erfahrungen und Erfolge.



So könnte man auch für Perl oder Visual Basic argumentieren. Ich finde es wichtig, dass eine Lehr-Sprache klare, einfache und verständliche Regeln hat, ein durchgehendes Konzept und eine ansprechende Syntax. Ansonsten weichen die schnellen Anfangserfolge auch ganz schnell dem Frust, und zwar sobald man sich mit der so anerzogenen "Läuft schon irgendwie"-Mentalität nicht mehr durchwursteln kann. Eine sichere Grundlage zu haben, wirklich zu *verstehen*, was man da tut, ist gerade in der Anfangsphase wichtiger als der schnelle Erfolg. Zu verstehen, warum es falsch ist, einen String in eine Int-Variable zu stopfen, ist wichtiger, als den Taschenrechner eine Stunde früher fertig zu haben. Nur wirst du das in PHP kaum sauber vermitteln können.


----------



## bone2 (15. Aug 2012)

wenn ihr euch hier schon um die Sprache streitet, dann nehmt Python.
Das ist sauber, klar und besonders zu anfang super einfach.

```
print("Hello world!")
```
nach einfachen Skripten und strukturierter Programmierung kann man dann auch OOP angehen.


----------



## CHAOSFISCH (15. Aug 2012)

bone2 hat gesagt.:


> wenn ihr euch hier schon um die Sprache streitet, dann nehmt Python.
> Das ist sauber, klar und besonders zu anfang super einfach.
> 
> ```
> ...



Okay, wie siehts aus mit Setup der Platform - gibt es dort relativ einfache Lösungen oder muss man hier wieder kompliziert arbeiten. Weil den Aspekt sollte man nicht vergessen.


----------



## bone2 (15. Aug 2012)

Python für das gewünschte OS runterladen, installien, fertig. (geht natürlich auch ohne installation)
Unter windows kann man danach sogar auf die *.py dateien doppelklicken und sie starten, oder einfach in der console 
	
	
	
	





```
xyz.py
```
 eingeben
alternativ geht überall 
	
	
	
	





```
python xyz.py
```

von 0 auf Hello world in 30 sec 


mann kann auch einfach nur python starten als konsolenanwendung und kann dann direkt in python lostippen, man braucht nichtmal ne datei. wird so zB als komplexer wissenschaftlicher skript-taschenrechner genutzt.


als editor bietet das freie (portable) notepad++ alles was man braucht an syntax highlighting
einrücken auf spaces und codervervollständigung aktiveren. fertig


----------



## hüteüberhüte (15. Aug 2012)

Landei hat gesagt.:


> Ach ja, und bitte kein BlueJ verwenden. Das Forum hatte schon genug Anfragen von Schülern, die daran verzweifelt sind...



Warum nicht? Mit BlueJ ist lässt sich sehr intuitiv arbeiten und es demonstriert anschaulich, was Objekte eigentlich sind. Es gibt sogar ein kurzes Tutorial für den Einstieg dazu



Landei hat gesagt.:


> Zu verstehen, warum es falsch ist, einen String in eine Int-Variable zu stopfen, ist wichtiger, als den Taschenrechner eine Stunde früher fertig zu haben.



Warum ist es denn falsch? Vom Compiler in Java würde man auch nur eine Fehlermeldung bekommen  Aber das ist zugegeben hilfreicher als in einer weak typed language


----------



## Devil0s (15. Aug 2012)

Also mein Jahrgang hat jetzt Java bekommen (ich konnte es davor schon ein bisschen.) und unser Info Lehrer hat mit Kara angefangen (noch nicht Java-Kara sondern erstmal das ganz normale ohne Quellcode).
Es geht um einen (virtuellen Marienkäfer, der sich in seiner Welt bewegt und dabei auf Baeume ,Pilze und Blaetter trifft.

Nun kann man den Marienkäfer bespielsweise ein programmieren, dass es alle Blaetter auf die er trifft einsammel und bei einem Baum stoppen soll usw.

Bei Java-Kara wird richtiger Java Quellcode genutzt und beim normalen Kara macht man das durch hin und her klicken.
Zum Einstieg eignet sich Kara wahrscheinlich recht gut um zu lernen wie man so denken muss beim programmieren und wenn wir die einfachen Grundlagen ( Variablen, Methoden usw. gelernt haben werden wir wahrscheinlich auch mit Java- Kara weitermachen.

Kara gibt es auch in anderen Sprachen Javascript, {ython usw. aber fuer dich waere wahrscheinlich Kara bzw. Java-Kara interessanter. 

MFG Devil0s


----------



## CHAOSFISCH (15. Aug 2012)

hüteüberhüte hat gesagt.:


> Warum nicht? Mit BlueJ ist lässt sich sehr intuitiv arbeiten und es demonstriert anschaulich, was Objekte eigentlich sind. Es gibt sogar ein kurzes Tutorial für den Einstieg dazu



BlueJ hat nicht mal Syntax-Highlighting...


----------



## hüteüberhüte (15. Aug 2012)

CHAOSFISCH hat gesagt.:


> BlueJ hat nicht mal Syntax-Highlighting...



Umso besser fürs Lernen. Würdest du gleich mit einer mit Funktionen vollgestopften IDE anfangen? Glaub net


----------



## CHAOSFISCH (15. Aug 2012)

hüteüberhüte hat gesagt.:


> Umso besser fürs Lernen. Würdest du gleich mit einer mit Funktionen vollgestopften IDE anfangen? Glaub net



Naja, würde ich nicht sagen. Syntax-Highlighting kann einem echt Probleme bereiten, wenn es nicht vorhanden ist. Zudem, der Lehrer - falls er sich den Code mal anschaut und ein Fehler im Code selbst ist - erkennt den Fehler schneller.


----------



## bone2 (15. Aug 2012)

Ich will den Fall sehen, wo Syntax Highlighting jemals Probleme macht.
Das ist nur positiv, sowohl für erste Schritte beim Lernen als auch für Kontrollen.


----------



## hüteüberhüte (15. Aug 2012)

bone2 hat gesagt.:


> Das ist nur positiv, sowohl für erste Schritte beim Lernen als auch für Kontrollen.



Dass Schlüsselworte falsch eingeben werden, ist eher selten. Syntaxfehler findet man damit eh nicht. Beispiel:


```
for (int i = 0; i < 5; i++);
{
  System.out.println("foo bar");
}
```

"Es wird nur einmal ausgegeben. Woran liegt das?" -> Was sollte Syntax-Highlighting hier helfen? Zumal der Compiler bei einem solchem auch eine entsprechende Fehlermeldung raushaut

Also ich sehe das nicht als Grund, BlueJ nicht zu verwenden


----------



## Helgon (15. Aug 2012)

> Warum nicht? Mit BlueJ ist lässt sich sehr intuitiv arbeiten und es demonstriert anschaulich, was Objekte eigentlich sind. Es gibt sogar ein kurzes Tutorial für den Einstieg dazu



ich fands schrecklich.. viele kapieren immer noch nicht was objekte sind und glauben das ein objekt immer eine rote box unten am bildschirm ist...

abgesehen davon, dass wen man objekte zur laufzeit erzeugt (was ja das normalste der welt ist) bluej diese nichtmal nachträglich als "rote boxen" anzeigt.

im endeffekt hats keinem beim lernen der oop geholfen 

- 

ich saß eh nur die ganze zeit da und hab den kopf geschüttelt.. meiner meinung nach die größte zeitverschwendung.. liegt teilweise natürlich aber auch am lehrer


----------



## hüteüberhüte (15. Aug 2012)

Kopf geschüttelt hatte ich auch das ein oder andere mal, so nach dem Motto: Das kann doch jetzt alles nicht wahr sein. Trotzdem hat mir das Arbeiten mit BlueJ, auch wenns insgesamt nur ein paar Stunden waren, immer viel Spaß gemacht


----------

