Programmieren/FAQ

Aus SDQ-Wiki

In unseren FAQs finden Sie einen Überblick über häufig gestellte Fragen und die entsprechenden Antworten zum Modul Programmieren. Bitte lesen Sie diese sorgfältig durch, noch bevor Sie Fragen haben, und überprüfen Sie diese regelmäßig und eigenverantwortlich auf Änderungen.


Start und KIT-Account

Wo kann ich einen KIT-Account bekommen?
Während des Immatrikulationsverfahrens sollten alle Studierenden einen Brief mit den Zugangsdaten für ihren eigenen KIT-Account (u-Kürzel und Passwort) erhalten. Dieser KIT-Account wird u. a. für die Anmeldung im WLAN, im Studierendenportal und für die Nutzung des Exchange-Servers benötigt. Bitte wenden Sie sich an das Studienbüro oder das SCC, wenn Sie keinen Brief erhalten haben. Bitte beachten Sie auch die FAQ des SCC.
Wie bekomme ich einen ATIS-Account?
Studierende der Fachbereiche Informatik, Informationswirtschaft, Wirtschaftsinformatik, Lehramt (mit Fachwahl Informatik) können einen ATIS-Account beantragen. Voraussetzung für Studierende ist jedoch zunächst der KIT-Account. Bitte beachten Sie auch die FAQ der ATIS.
Ich besitze noch keinen KIT-Account. Wie kann ich Übungsblätter erhalten und abgeben?
Bitte wenden Sie sich umgehend an Ihren Tutor oder Ihre Tutorin, um die Aufgabenstellung zu bekommen. Sobald Sie Ihren KIT-Account haben, können Sie auf den entsprechenden ILIAS-Kurs zugreifen und alle Vorlesungs- und Übungsmaterialien dort finden. Übungsblätter werden grundsätzlich nur über Artemis abgegeben. Ohne KIT-Account ist ein Login allerdings nicht möglich. Bitte warten Sie zunächst ab, ob Ihr KIT-Account womöglich doch noch rechtzeitig eingerichtet ist. Rechtzeitig bedeutet vor Ablauf der Abgabefrist von Übungsblatt 1. Haben Sie kurz vor Ablauf der Abgabefrist nachweislich noch immer keine KIT-Account erhalten, so gilt folgende Ausnahmeregelung: Senden Sie Ihre Abgabe fristgerecht per E-Mail an Ihren Tutor. E-Mail-Abgaben, die nach Ablauf der Abgabefrist eintreffen, werden nicht akzeptiert. E-Mail-Abgaben von Studierenden, die bereits einen KIT-Account besitzen, werden verworfen. Melden Sie sich bitte umgehend im Artemis an, sobald Sie Ihren KIT-Account erhalten haben. Alle späteren Abgaben erfolgen dann über Artemis. Außerdem melden Sie sich beim SCC bzgl. des KIT-Accounts.
Die Zulassungsbestätigung des KIT habe ich erst nach Vorlesungsbeginn erhalten. Dadurch habe ich einige Fristen verpasst. Was muss ich tun?
Melden Sie sich schnellstmöglich zu einem Tutorium an wie nachfolgend beschrieben. Beachten Sie auch die Hinweise bei fehlendem KIT-Account und fehlender Matrikelnummer.
Welche Art von Computer benötige ich?
Auch wenn es durchaus vorteilhaft ist, einen eigenen Computer zu haben, wird für das Modul in der Regel kein eigener Computer benötigt. Das KIT bietet mehrere Möglichkeiten, einen Computer zu nutzen, zum Beispiel in den Poolräumen des SCC. Sofern Sie ein ATIS-Konto haben, können Sie auch den entsprechenden Poolraum im Informatikgebäude nutzen.
Was sind die Hardware- und Software-Voraussetzungen für die Teilnahme an der Programmierübung und den Abschlussaufgaben?
Ein Computer mit Internetanschluss, auf dem mindestens ein OpenVPN-Client und das JDK 17 betrieben werden können, ist die Mindestvoraussetzung für die Teilnahme am Modul. Die Hardware-Voraussetzungen für das Betriebssystem Ubuntu wären z.B. mindestens ein 2 GHz Dual-Core-Prozessor, 4 GiB RAM (Systemspeicher), 25 GB Festplattenspeicher (oder USB-Stick, Speicherkarte oder externes Laufwerk), VGA mit einer Bildschirmauflösung von 1024x768 und entweder ein CD/DVD-Laufwerk oder ein USB-Anschluss für das Installationsmedium.
Welche IDE und welcher Texteditor wird empfohlen?
Es wird keiner vorgegeben. Viele Studierende nutzen IntelliJ. Dafür können Sie sich als Studierende sogar kostenlos die Ultimate Edition holen. Es wird empfohlen, dass Sie das erste Übungsblatt ohne IDE-Unterstützung schreiben, damit Sie auf die Präsenzübung vorbereitet sind.

Vorlesung

Wie lautet die Vorlesungshomepage?
Die semesteraktuelle Vorlesungshomepage ist immer unter der folgenden URL abrufbar: https://sdq.kastel.kit.edu/wiki/Programmieren
Werden die Folien zur Verfügung gestellt?
Die PowerPoint-Folien sind nach der Vorlesung im ILIAS-Kurs als PDF verfügbar.
Gibt es ein Vorlesungsskript?
Neben den Vorlesungsfolien könnten Sie eventuell die folgende Literaturhinweise interessieren: P. Pepper, Programmieren Lernen, Springer, 3. Auflage 2007
Wo kann ich die Aufzeichnungen der Vorlesung (vergangener Jahre) online finden?
Vorlesungen und sonstige Aufzeichnungen auf YouTube finden Sie auf dem Kanal des KIT, „KIT Lehre und Wissen“.
Warum sind die Beispiele auf den Folien sind nicht immer ausführbar oder verkürzt?
Der Platz auf den Folien ist leider beschränkt. Sollte etwas stilistisch nicht dem Checkstyle entsprechen o. ä., sehen Sie es uns bitte nach.


Anmeldung für Tutorien

Wie kommt man ins WiWi-Portal?
Im WiWi-Portal kann man sich über den KIT-Account anmelden. Wenn Sie diesen noch nicht haben, können Sie auf der Anmelde-Seite durch Klick auf „Anmeldung Externe“ einen temporären Zugang anlegen.
Wofür ist das Tutorium gedacht?
Zusätzlich zur Vorlesung finden im Wintersemester wöchentlich Tutorien statt, die Ihnen sowohl eine Nachbereitung von vergangenen Vorlesungen als auch eine Besprechung von Übungsblättern anbieten. Die Tutorien dienen als Ergänzung zum Vorlesungsstoff und gleichzeitig zur Vorbereitung der Abschlussaufgaben.
Muss ich mich für ein Tutorium anmelden?
Wenn Sie den Übungsschein erhalten wollen (der Voraussetzung für die Abschlussaufgaben ist), dann empfehlen wir die Teilnahme an einem Tutorium.
Ist es möglich, sich als Gruppe für ein Tutorium anzumelden?
Ja, das ist möglich. Nach der Anmeldung einer Person auf der entsprechenden Website können sich die anderen Gruppenmitglieder über einen Einladungslink zur Gruppe hinzufügen.
Sind die Tutorien für Programmieren nach Studiengängen geordnet?
Nein, sie sind gemischt.
Ist es möglich, dass ich nachträglich das Tutorium wechsele?
Nein, um einen fairen Arbeitsaufwand für alle Tutoren und Tutorinnen zu gewährleisten, ist es in der Regel nicht möglich, das zugewiesene Tutorium nachträglich zu ändern.
Ich habe die Anmeldefrist für die Tutorien verpasst. Können Sie mich nachträglich einem Tutorium zuordnen?
Schreiben Sie eine E-Mail an programmieren-vorlesung@cs.kit.edu. Nennen Sie in dieser E-Mail Ihren Namen, Ihre Matrikelnummer und Ihr u-Kürzel. Kennen Sie diese noch nicht, erwähnen Sie das ausdrücklich in Ihrer E-Mail. Sie erfahren die Zuordnung per E-Mail; dies kann 2–3 Arbeitstage dauern.
Sind die Tutorien oder Präsenzübung öffentlich?
Alle Tutorien sowie die Präsenzübung, unabhängig davon, ob sie online oder in Präsenz stattfinden, sind nicht öffentlich. Für die Teilnahme ist eine vorherige Anmeldung und Annahme erforderlich, sodass jedes einzelne Tutorium oder Präsenzübung ausschließlich für einen begrenzten Personenkreis bestimmt ist. Da sich das dort gesprochene Wort nicht an die allgemeine Öffentlichkeit richtet und nicht wahrnehmbar über einen abgegrenzten Personenkreis hinaus gesprochen wird, ist es selbst auch nicht öffentlich.
Können diejenigen, die bereits Programmieren können, den Vorlesungen ohne Bedenken fernbleiben?
Sie müssen selbstständig entscheiden, ob Sie die Vorlesung anschauen wollen oder nicht. Den Übungsschein bzw. auch die Abschlussaufgaben müssen Sie dennoch bestehen. Beachten Sie jedoch, dass auch Stil- und Entwurfsentscheidungen eine große Rolle in der Vorlesung und bei der Benotung der Abschlussaufgaben spielen, die über die eigentliche Funktionalität des Programms hinaus gehen.
Braucht man für die Tutorien einen Laptop?
Nein, aber Sie brauchen einen Rechner zum Bearbeiten der Übungsblätter.


Erfolgskontrollen

Welche Voraussetzungen müssen erfüllt sein, um das Modul zu bestehen?
Das Bestehen des Moduls setzt zwei Erfolgskontrollen voraus. Die erste Erfolgskontrolle ist der Erwerb des unbenoteten Übungsscheins. Dies ist durch das Erhalten von mehr als 50 % der maximal zu erreichenden Punktzahl aus den Übungsblättern und Bestehen der Präsenzübung möglich. Des Weiteren ist zum Erhalt eines Übungsscheins eine fristgerechte Anmeldung im Campus Management Portal erforderlich. Die zweite Erfolgskontrolle stellt das Bestehen zweier Abschlussaufgaben dar und ist lediglich nach dem Erwerb der ersten Erfolgskontrolle möglich. Nach dem Erhalt eines Übungsscheines ist eine weitere Anmeldung zur Teilnahme an den Abschlussaufgaben im Campus Management Portal erforderlich.
Wie setzt sich die Note für das Modul zusammen?
Die Gesamtnote des Moduls setzt sich alleinig aus der Note der zwei Abschlussaufgaben zusammen.
Kann ich die Erfolgskontrollen nur im Wintersemester absolvieren?
Nein, wir geben die Möglichkeit, diese im Winter- oder Sommersemester zu absolvieren. Im Sommersemester bietet die Programmieren-Übung die Möglichkeit, den Übungsschein zu erwerben und oder die Abschlussaufgaben zu bearbeiten. Die Programmiervorlesung selbst findet jedoch im Sommersemester nicht statt. Die Inhalte der Übung orientieren sich an der Programmiervorlesung des vorangegangenen Wintersemesters.
Ich habe den Übungsschein versucht, allerdings noch nicht die Abschlussaufgaben. Gilt dies als mein erster Prüfungsversuch?
Nein, der erste Prüfungsversuch zählt beim Antreten der Abschlussaufgaben.
Was muss beachtet werden, wenn ich die Abschlussaufgaben in einem anderen Semester als den Übungsschein bearbeitetet werden?
Im Campussystem muss man sich zudem für die entsprechende Prüfungsleistung anmelden.
Gibt es eine Klausur?
Nein, stattdessen gibt es zwei Abschlussaufgaben über jeweils 4 Wochen.
Kann ich nur die Abschlussaufgaben machen, wenn ich den Übungsschein schon erhalten habe?
Falls Sie den Übungsschein bereits haben (vorheriges Semester oder Anerkennung), können Sie nur die Abschlussaufgaben machen und müssen nicht erneut die Übungsblätter bearbeiten.
Ich habe weitere organisatorische Fragen hinsichtlich der Erfolgskontrollen.
Bei organisatorischen Fragen zu ihrem Studiengang und zu speziellen Prüfungssituationen wenden Sie sich bitte an den entsprechenden Studiengangservice. Für die Fakultät für Informatik ist dies beispielsweise der Informatik Studiengangservice (ISS). Verbindliche Informationen zu den Prüfungsmodalitäten für Programmieren im Rahmen Ihres Studiums erhalten Sie in den jeweils zutreffenden Modulhandbüchern, der Prüfungsordnung und per Nachfrage beim Studiengangservice.


Artemis

Was kann passieren, wenn ich mich nicht fristgerecht im Artemis anmelde?
Die Aktivierung Ihres Accounts im Artemis könnte sich verzögern. Dadurch kann nicht mehr garantiert werden, dass alle Übungsblätter fristgerecht abgegeben werden können. Eine Verlängerung der Frist für die Abgabe eines Übungsblattes ist nicht möglich.
Ich habe die Anmeldefrist für den Artemis verpasst. Kann ich mich noch nachträglich anmelden?
Ja, eine nachträgliche Anmeldung ist noch möglich. Bitte erledigen Sie dies umgehend, damit es zu keinen Problemen oder Verzögerungen kommt.
Beim Versuch, die Artemis-Website zu laden, steht bei mir immer Website nicht erreichbar. Ich bin aber im KIT-WLAN, woran kann das liegen?
Sie müssen sich mit dem WLAN mit der SSID „KIT“ verbinden. Weitere Informationen dazu finden Sie hier: https://www.scc.kit.edu/dienste/wlan.php
Warum ist Artemis nur im Netz des KIT oder über das VPN verfügbar?
Das Anbieten von öffentlich erreichbaren Webseiten stellt höhere Anforderungen an die Sicherheit der Website. Daher ist Artemis nur im Netz des KIT bzw. über das VPN verfügbar.
Um auf Artemis von z. B. zu Hause zugreifen zu können, benötige ich eine VPN. Was muss ich dafür installieren und einrichten?
Alle Informationen finden Sie auf folgender Seite: http://www.scc.kit.edu/dienste/vpn.php
Wo kann ich nähere Informationen über Artemis finden?
Lesen Sie unbedingt den offiziellen Studentenleitfaden zu Artemis. Dort finden Sie viele nützliche allgemeine Informationen sowie Informationen zur konkreten Teilnahme an der Online-Prüfung für die Abschlussaufgaben.
Gibt es in Artemis einen Unterschied bei der Abgabe der Übungsblätter und der Abgabe der Abschlussaufgaben?
Ja, die Abschlussaufgaben müssen explizit abgegeben werden. Wenn Sie mit einer Abschlussaufgabe fertig sind oder die Zeit abläuft, müssen Sie in Artemis explizit zum zugehörigen Endbildschirm navigieren. Entweder geschieht dies durch Anklicken der Schaltfläche „Vorzeitig abgeben“ oder automatisch, wenn die Bearbeitungszeit abgelaufen ist. Ihre Abschlussaufgabe wird nicht benotet, wenn Sie diese nicht explizit selbstständig abschließen! In dem entsprechenden Endbildschirm sollten Sie bestätigen, dass Sie alle Regeln eingehalten haben und mit Ihrem vollen Namen unterschreiben. Sobald Sie so Ihre Abschlussaufgabe abgeschlossen haben, können keine weiteren Änderungen an dieser vorgenommen werden.


Abgabe und Bewertung der Übungsblätter

Kann das Nicht-Einhalten des Checkstyles auch schon bei den ersten Übungsblättern zu Abzug führen?
Ja, das kann durchaus passieren. Daher empfiehlt es sich, von Anfang an den Checkstyle zu aktivieren und Warnungen/Fehler zu beheben. „Ein sauberer Stil ist Ehrensache“.
Wie viele Übungsblätter und Punkte gibt es?
Im Rahmen dieses Moduls werden insgesamt 5 Übungsblätter mit je 20 Punkten ausgegeben. Insgesamt können so maximal 100 Punkte durch die Bearbeitung der Übungsblätter erreicht werden.
Wann werden die Übungsblätter veröffentlicht?
Die Übungsblätter werden in der Regel im Zweiwochenrhythmus im zugehörigen ILIAS-Kurs veröffentlicht. Die Bearbeitungszeit beträgt in der Regel jeweils ungefähr zwei Wochen. Die genauen Termine und Fristen sind auf der aktuellen Website zur Vorlesung aufgeführt.
Wo wird man über Änderungen in der Aufgabenstellung informiert?
Änderungen werden auf der Programmieren-ILIAS Seite beschrieben.
Darf ich meine Lösungen für die Übungsaufgaben oder Abschlussaufgaben veröffentlichen?
Nein. Dies ist nicht erlaubt, da es sich hier um eine Prüfungsleistung handelt.
Ich habe eine Frage zum aktuellen Übungsblatt. Wo kann ich diese stellen?
Fragen zu Vorlesungsinhalten und Übungsblättern stellen Sie bitte ausschließlich in den zughörigen Diskussionsforen. So profitieren auch Ihre Kommilitonen davon. E-Mails mit inhaltlichen Fragen werden in der Regel nicht beantwortet.
Warum wurde meine Frage / Beitrag im ILIAS-Forum entfernt?
Fragen, die bereits gestellt wurden, unzulässige Fragen sowie unangemessene Beiträge werden von den Moderatoren gelöscht. Auch nicht-minimalistische Code-Beispiele sind unzulässig.
Darf ich im Rahmen der Übungsblätter oder der Abschlussaufgaben Quellen wie z. B. „Stack Overflow“ benutzen?
Nein, da alle Prüfungsleistungen eigenständig und ohne fremde Hilfe erbracht werden müssen.
Muss ich zum Programmieren ein bestimmtes Programm benutzen?
Nein, das ist Ihnen überlassen. Wir empfehlen allerdings, insbesondere für die Bearbeitung der Abschlussaufgaben eine IDE (Integrated Development Environment) wie Eclipse oder IntelliJ zu verwenden.
Wo werden die Ergebnisse der Übungsblätter, Präsenzübung oder Abschlussaufgaben veröffentlicht?
Jeder Teilnehmer kann sein Ergebnis über Artemis bzw. die SDQ-Newslist abrufen und einsehen.
Was sind verpflichtende öffentliche Tests?
Diese Tests stehen Ihnen, sobald Sie abgeben können, zur Verfügung, um Ihre Abgabe auf das erwartete Mindestmaß an Korrektheit zu testen. Die Beispielinteraktionen auf den Aufgabenblättern entsprechen einem dieser Tests, desweiteren die Prüfung der Einhaltung der Checkstyle-Regeln und weiteres.
Wenn mein Programm Testfälle nicht besteht und ich es später nochmal korrekt hochlade, kostet mich das Punkte?
Nein, nur die letzte Abgabe wird gewertet. Das bedeutet umgekehrt aber auch, dass Sie keine Punkte erhalten, wenn ihre letzte Abgabe die verpflichtenden Tests nicht besteht, selbst wenn das bei einer früheren Abgabe nicht der Fall war.
Was passiert wenn die Zeit zu knapp war und daher Tests fehlschlagen. Bekomme ich dann einen Teil der Punkte?
Nein, denn die verpflichtenden öffentlichen Tests sind das Mindestmaß (Bestehensgrenze) für eine Abgabe.
Wie kann ich bei der Nutzung einer IDE die geforderten Checkstyle-Regeln überprüfen?
Sie müssen zuvor das entsprechende Plug-in installieren. Die XML-Datei mit den Checkstyle-Regeln zur Aufgabe finden Sie in demselben Ordner wie die Aufgabe.
Kann man Checkstyle auch in IntelliJ einbinden?
Ja, in IntelliJ gibt es das Plugin mit den Namen „CheckStyle-IDEA“ im Marketplace.
Warum gibt es einen „Checkstyle Optional“ und einen „Checkstyle Required“?
Der Checkstyle Required ist notwendig, um ein Mindestmaß an Lesbarkeit zu gewährleisten und ihre Abgabe zu bewerten. Im Checkstyle Optional befinden sich die Stilvorgaben, die Abzug geben können, evtl. erst später notwendig und dennoch anzustreben sind.
Warum wird ein Tabulator (tab) als Fehler erkannt?
Die Richtlinie für die Vorlesung Programmieren schreibt die Verwendung von vier Leerzeichen anstelle von einem Tabulator vor. Die Richtlinie ist dafür da, dass der Programmcode einheitlich formatiert ist, da Tabulatoren je nach Umgebung unterschiedlich groß ausfallen könnten.
Welche Libraries darf ich bei meiner Abgabe nutzen?
Es dürfen ausschließlich explizit in der Aufgabenstellung zugelassene Libraries importiert und verwendet werden. Andernfalls wird die Aufgabe mit 0 Punkten bewertet.
java.lang.Klasse ist erlaubt, aber java.lang.unterpaket.Klasse nicht (analog für util)?
Ja, Java selbst kennt das Konzept von Unterpaketen derart nicht. java.lang und java.lang.annotation sind zwei unabhängige Pakete und teilen sich lediglich die Ordnerstruktur. In den Abgaben nur die explizit angegeben Pakete verwenden.
Darf instanceof verwendet werden?
Nein, instanceof und getClass außerhalb der equals-Methode bitte dringlich vermeiden.
Sind beide Abschlussaufgaben oder nur der Schnitt zu bestehen?
Jede Abschlussaufgabe wird mit 20 Punkten bewertet. Diese werden addiert. Damit muss die Gesamtmindestpunktzahl, die sich üblicherweise um die 20 Punkte bewegt, erreicht werden.
Was sind dann die Voraussetzungen, um die 50 % in den Abschlussaufgaben zu erreichen?
Das lässt sich nicht so pauschal beantworten, da es mehrere Bewertungskriterien (z. B. Objektorientierung, Komplexität, Programmierstil und Funktionalität) gibt.
Was sind die Bewertungskriterien der Abschlussaufgabe?
Die Bewertung erfolgt anhand einerseits der Funktionalität (durch automatische Tests) sowie der Bewertung der Methodik, z. B. Objektorientierung, Komplexität und Programmierstil. Hier müssen die Prinzipien der Vorlesung und des Wikis eingehalten werden. (Verbindliche Antworten gibt es hier nur von der Übungsleitung.)
Sollte man auch für die Klassenvariablen, die selbsterklärend sind, Javadocs schreiben?
Man sollte in diesem Fall der Checkstyle-Forderung mit einem Javadoc mit Beispiel o. ä. nachgehen.
Verändern sich die Checkstyle-Regeln im Laufe der Übungsblätter?
Ja, verwenden Sie immer die Checkstyle-Regeln, die mit dem Übungsblatt herausgegeben werden.
Soll Java-Doc für überschriebene Methoden erstellt werden?
Es ist nicht immer notwendig, aber in vielen Fällen sinnvoll. Zum Beispiel, wenn Implementierungsdetails beschrieben werden sollen.
In welcher Sprache müssen die Aufgaben bearbeitet werden?
Programmcode (Name von Funktionen, Variablen etc.) muss in englischer Sprache verfasst sein. Kommentare müssen konsistent entweder auf Deutsch oder Englisch verfasst werden.
Werden Beispiellösungen zu den Übungsaufgaben bereitgestellt?
Ja, diese werden einige Tage nach Ablauf der Abgabefrist in den Ordner der entsprechenden Aufgabe hochgeladen.
Sind die Beispiellösungen eindeutig?
Die Beispiellösungen sind häufig sehr ausführlich. Beim Programmieren gibt es natürlich viele Wege, um ans Ziel zu kommen. Es gibt häufig auch weniger komplexe Lösungen, welche aber alle Entwurfs- und Funktionalitätsanforderungen erfüllen, und so die volle Punktzahl bekommen.
Wie viel darf ich aus alten Beispiellösungen abschreiben?
Eine 1:1 Übernahme der Beispiellösung ist prinzipiell nicht erwünscht. Natürlich dürfen sie sich aber bei der Wahl von Konzepten, Strukturen und ähnlichem von den Beispiellösungen aus dem aktuellen Semester inspirieren lassen.
Dürfen Labels verwendet werden, um aus verschachtelten Schleifen auszubrechen?
Dies sollte vermieden werden. Zwar dürfen sie verwendet werden, allerdings ist die Verwendung von Labels und Break-Anweisungen im Allgemeinen eher schlechter Stil.
Dürfen wir in den Abschlussaufgaben jeglichen eigenen Code, den wir selbst für ein Übungsblatt geschrieben haben, wiederverwenden?
Ja.
Dürfen wir in den Übungsblättern mehr Java verwenden, als wir aus der Vorlesung kennen?
Wenn Sie die gegebenen Regeln bezüglich erlaubten Packages etc. einhalten, ist dies erlaubt.
Wie sollten Pakete benannt sein?
Die Pakete sollten im besten Fall dem Schema „edu.kit.informatik.<was>.<die>.<Klassen>.<tun>“ benannt sein.
Ist die Performance von abgegebenem Code relevant?
Nicht wirklich, der Fokus liegt auf guter Modellierung des Programms.
Sollen Testklassen mit abgegeben werden?
Nein. Die Abgabe von Testklassen führt zu Punktabzug.
Müssen auch selbstverständliche Methoden/Klassen/Konstanten mit Javadocs dokumentiert werden?
Ja. Alle öffentlichen Methoden müssen dokumentiert werden.
Müssen Methoden die gleiche Exception werfen wie die Methode, die sie aufrufen, oder darf ich allgemeinere Exceptions weitergeben?
Es darf auch eine allgemeinere Exception weiter geworfen werden.
Geben überflüssige Klammern Abzug?
Nur, wenn die Checkstyle-Regeln nicht erfüllt werden oder die Übersichtlichkeit stark beeinträchtigt wird.
Müssen einfache Codezeilen kommentiert werden? i = i + 1; // increase i by 1
Das wäre ein Beispiel für einen unnötigen Kommentar. Wenn klar ersichtlich ist, was Sie tun, müssen Sie diesen Schritt nicht kommentieren.
Soll so viel kommentiert werden, wie in den Vorlesungsbeispielen?
Nein, verzichten Sie auf Kommentare, die Offensichtliches beschreiben. Kommentare sollen als Verständnishilfe dienen, wenn eine fremde Person (oder oft Sie selbst nach einiger Zeit) sich den Code anschaut und ihn verstehen möchte.
Dürfen Konstanten in eine eigene Klasse ausgelagert werden?
Im Allgemeinen ist von einer Konstantenklasse abzuraten. Die Konstanten sollten dort abgelegt werden, wo sie auch verwendet werden.
Dürfen WildCard-Imports (bspw. import java.util.*) verwendet werden?
WildCard-Imports sind schlechter Stil. Die nötigen Klassen sollten direkt importiert werden.
Bekommt man für 4 (oder mehr) verschachtelte For-Schleifen direkt Punkteabzug? (Laut Wiki ist das schlechter Stil)
So eine Verschachtelung kann in der Regel immer durch günstiges Auslagern in private Hilfsmethoden verhindert werden.
Bekommen wir bei den Übungen Punktabzüge, wenn wir für unser Programm nicht die idealen Datentypen wählen, also z. B. immer int nehmen?
Ja.
Wenn man bei Klassen/Interfaces nicht alle selber benötigt, sollte man diese dann löschen, weil es „unnötiger Code“ ist oder behalten wegen Erweiterbarkeit?
Eure Lösung sollte erweiterbar, aber nicht erweitert sein. Das heißt: Features, die nicht voll ausgenutzt werden, sind in Ordnung, ungenutzte Klassen/Interfaces aber sinnlos.


Präsenzübung / Übungsschein

Gibt es eine zusätzliche Anmeldung für die Präsenzübung?
In einem Semester gibt es für die Teilnahme an der Präsenzübung nur die eine reguläre Anmeldung zum Übungsschein. Da die Präsenzübung Teil des Übungsscheins ist, wird Ihnen ein Platz in der Präsenzübung zugewiesen, wenn Sie sich in diesem zugehörigen Semester erfolgreich zur Teilnahme am Übungsschein anmelden.
Welche Teile werden benotet und wie setzt sich die Modulnote zusammen und wofür ist der Übungsschein?
Ihre Note setzt sich nur aus der Bewertung der Abschlussaufgaben zusammen. Aber Sie müssen den Übungsschein bestanden haben, um die Abschlussaufgaben bearbeiten zu können.
Wie viel Prozent der Übungsblätter sind für den Übungsschein benötigt?
> 50%, also 50,5/100 Pkt
Was passiert, wenn man nicht genug Punkte für den Übungsschein gesammelt hat?
Dann müssen Sie diesen in einem anderen Semester bestehen. Beachten Sie hierbei, dass Sie die Abschlussaufgaben nur mit bestandenen Übungsschein bearbeiten können. Beachten Sie gegebenenfalls die zeitlichen Beschränkungen Ihrer Prüfungsordnung.
Wird die Präsenzübung/Übungsblätter benotet?
Nein. Sowohl den Übungsschein als auch die Präsenzübung kann man nur bestehen oder nicht bestehen. Es gibt keine Note dafür.
Wo finde ich weitere Informationen zur Präsenzübung oder zum Übungsschein?
Bitte beachten Sie die Hinweise und Informationen im ILIAS-Forum, sowie auf der aktuellen Website zur Vorlesung. Prüfen Sie beides regelmäßig auf Aktualisierungen.
Was passiert, wenn man durch die Präsenzübung fällt?
Dann gilt der versuchte Übungsschein als nicht bestanden.
Ich habe die Abschlussaufgaben nicht bestanden, den Übungsschein aber schon. Muss ich jetzt den Übungsschein auch wiederholen?
Nein, im Regelfall bleibt der Übungsschein bestehen. Kontrollieren Sie dennoch Ihre Studienordnung/Modulhandbuch, ob es für Ihren Studiengang eine Ausnahme gibt.
Ich habe den Übungsschein schon in einem anderem Jahr bestanden, muss ich diesen noch mal machen?
Wenn Sie den Übungsschein schon im https://campus.studium.kit.edu/ eingetragen haben, müssen Sie nur die Abschlussprüfung schreiben. Dafür müssen Sie sich allerdings sowohl im https://campus.studium.kit.edu/, als auch in Artemis für die Prüfung anmelden.
Wie unterscheidet sich der Übungsschein von den Abschlussaufgaben?
Der Übungsschein und die Abschlussaufgaben sind zwei separate Dinge. Mit Hilfe der Übungsblätter können Sie den Übungsschein erwerben. Der Übungsschein ist Voraussetzung für die Teilnahme an den Abschlussaufgaben. Diese Abschlussaufgaben dienen als Modulprüfung.
Die zwei Abschlussaufgaben bilden zusammen eine Prüfung oder sind das zwei separate Prüfungen?
Die zwei Abschlussaufgaben bilden zusammen Ihre Modulprüfung.
Kann man auch im Sommersemester den Übungschein machen?
Ja, es gibt allerdings keine Vorlesung. Tutorien schon, aber eventuell nicht wöchentlich.
Brauche ich für die Präsenzübung meine KIT-Card?
Um an der Prüfung teilnehmen zu dürfen, müssen Sie sich mit Ihrer KIT-Card ausweisen können. Haben Sie ihren Ausweis verloren, oder gar noch nicht erhalten, reicht auch ihr amtlicher Personalausweis mit einer aktuellen Immatrikulationsbescheinigung.
Bekommt man auch den Übungsschein, wenn man nur die Präsenzübung erfolgreich absolviert?
Nein, Sie brauchen zusätzlich zur Präsenzübung auch insgesamt über 50 % bei den Übungsaufgaben.


Anmeldung für Übungsschein / Abschlussaufgaben

Wo im Campus-Management-Portal finde ich die Anmeldung für Übungsschein und Abschlussaufgaben?
Öffnen Sie zunächst das Campus Management Portal. Wählen Sie dann Prüfungsanmeldung und -abmeldungBachelor InformatikBachelor-MasterGesamtkontoPraktische InformatikProgrammieren.
Mir wurde eine frühere Prüfungsleistung als Programmieren-Übungsschein anerkannt, muss ich mich dennoch für den Übungsschein anmelden?
Nein. Die bewilligte Anerkennung wird durch den Informatik Studiengangservice (ISS) dem Studierendenservice mitgeteilt, wo schließlich der Übungsschein als bestanden eingetragen wird. Prüfen Sie rechtzeitig im Campus Management Portal, ob der Programmieren-Übungsschein tatsächlich als bestanden ausgewiesen wird. Andernfalls halten Sie Rücksprache mit dem ISS.
Ich höre Programmieren im Nebenfach, wie melde ich mich für Übungsschein und Abschlussaufgaben an?
Ob ein Prüfungsanspruch in Programmieren besteht, entscheidet die Fakultät des Hauptfaches. Im positiven Fall stellt Ihnen der Studierendenservice jeweils einen Zulassungsschein (“blauen Schein“) aus. Geben Sie beide Zulassungsscheine fristgerecht bei uns ab.
Ich bin Erasmus-Incomer, wie melde ich mich für Übungsschein und Abschlussaufgaben an?
Der Informatik Studiengangservice (ISS) stellt Ihnen eine Prüfungszulassung aus. Diesen Vorgang beschreibt http://www.informatik.kit.edu/erasmus_in.php. Geben Sie die Prüfungszulassung fristgerecht bei uns ab.
Wann wird im Studierendenportal (CAS) der Übungsschein als bestanden markiert?
Die Eintragung wird im ILIAS Forum angekündigt. Im Allgemeinen erfolgt die Eintragung wenige Wochen nach der Korrektur des fünften Übungsblattes.
Wann muss ich mich im Studierendenportal (CAS) zu den Prüfungen anmelden? Bei mir als Schülerstudent
in steht „Kein Studiengang gefunden“.
Aktuelle Termine werden auf der Vorlesungsseite und im ILIAS veröffentlicht. Als Schülerstudent:in wenden Sie sich bitte an die Übungsleitung: programmieren-vorlesung@cs.kit.edu

Termine und Fristen

Wo finde ich die Termine von Anmeldungen und Veröffentlichungen?
Aktuelle Termine werden auf der Vorlesungsseite und im ILIAS veröffentlicht.
Ich habe die Anmeldefrist für eine Prüfungsleistung (Übungsschein oder Abschlussaufgaben) verpasst. Kann ich mich noch nachträglich anmelden?
Nein! Das korrekte Überwachen der Einhaltung bekannter Fristen dient der Durchsetzung der Prüfungsordnung und auch der Fairness Ihren Mitstudierenden gegenüber.
Wann erfährt man die Punkte der ersten Abschlussaufgabe? Noch vor Abgabe der zweiten?
Die Veröffentlichung wird für beide Abschlussaufgaben gemeinsam im ILIAS angekündigt.
Bis wann kann man sich wieder von den Abschlussaufgaben abmelden? Noch während der Aufgaben?
Bis wann man sich abmelden kann, wird im Campus-Management System stehen, wenn man sich für die Abschlussaufgaben anmeldet.


Java

Sollten für Enums immer eine eigene Datei erstellt werden, oder darf man sie auch in einer Klasse definieren?
Innere Klassen und Enums sollten immer private sein. Ist dies nicht möglich, so empfiehlt es sich diese in einer eigenen Datei zu definieren.
Welche Java-Version brauchen wir?
Immer die Version, die auch Artemis verwendet, derzeit Java 17. Wenn Sie in Ihrem Programm Features nutzen, die erst nach Java 17 eingeführt wurden, wird ihr Programm nicht kompilieren und ihre Aufgabe wird nicht bewertet.
Was passiert, wenn man eine Klasse in der Main-Methode deklariert?
Dann haben Sie eine lokale Klasse erstellt, die Sie nur in der Main-Methode selbst verwenden können. Diese werden Sie in diesem Modul aller Wahrscheinlichkeit nach nicht brauchen. Falls Sie dennoch mehr dazu nachlesen wollen: https://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html
Welchen Effekt hat einfach nur das Zusammenfassen durch geschweifte Klammern in einem Block { ... } ohne das Anwenden von einer while-Schleife oder ähnlichem?
Das ändert erst einmal nur den Gültigkeitsbereich. Das heißt, dass Variablen, die Sie innerhalb der geschweiften Klammern deklariert haben, nicht außerhalb der geschweiften Klammern verwendet werden können. Ohne die Verwendung zusätzlicher Konstrollstrukturen spielt dieses Sprachfeature üblicherweise keine größere Rolle. Falls Sie dennoch mehr dazu nachlesen wollen: https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html
Welchen Zweck erfüllen bitweise Operatoren?
Bitweise Operatoren sind wichtige Grundlagen vieler Algorithmen, die ihnen hauptsächlich in späteren Modulen begegnen werden. In Vorbereitung auf die Präsenzübung sollten diese ihnen dennoch vertraut sein.
Wozu dienen Konstruktoren in Klassen?
Mithilfe von Konstruktoren werden Objekte von Klassen instanziiert. Ist in einer Klasse kein expliziert Konstruktor definiert, so besitzt diese einen leeren Standardkonstruktor.
Wozu dienen Interfaces?
Interfaces geben verschiedene Methodensignaturen vor, welche von den Klassen, welche das Interface implementieren, korrekt implementiert werden müssen. Dies erlaubt anderen Klassen, gegen das Interface zu implementieren, statt sich auf ein spezielles Objekt zu fokussieren.
Müssen Superklassen als private deklariert werden?
Superklassen dürfen beliebige Sichtbarkeiten haben.
Warum ist 0.1f + 0.000000001f = 0.1f und nicht 0.100000001f?
Dies ergibt sich durch Ungenauigkeiten in Gleitkommazahlen im Standard IEEE-754.
Warum wird immer ein f hinter Zahlen des Typs float geschrieben, wie z.B. bei 845445f ?
Falls das nicht geschieht, gibt es einen Fehler. Standardmäßig wird eine Kommazahl von Java als double interpretiert.
Sollten Konstruktoren auch private sein?
Bei Hilfsklasse (engl. Utility class) müssen Konstruktoren privat sein, um eine Instanziierung zu verhindern. Außerhalb sind die üblichen Regeln der Sichtbarkeit zu beachten, für gewöhnlich public.
Sollen für Konstanten Getter verwendet werden?
Die Sichtbarkeit von Konstanten unterliegt den gewöhnlichen Regeln. Sind diese privat gewählt, ist ggf. ein Getter notwendig. Öffentliche Konstanten benötigen keinen Getter.
Was ist ein Hash- bzw. TreeSet?
Ein HashSet ist eine ungeordnete duplikatsfreie Menge, ein TreeSet eine sortierte duplikatsfreie Menge.
Warum heißt die TreeMap „TreeMap“?
„Map“ ergibt sich durch die Zuordnung von Schlüsseln (engl. Key) zu Werten (engl. Value). Tree ist die darunterliegende Datenstruktur.
Gibt es einen essentiellen Unterschied zwischen den verschiedenen „Map-Arten“ in Java?
In der Benutzung gibt es keine essentiellen Unterschiede. Die Unterschiede liegen in der Implementierung und der Performance.
Was ist die Funktionsweise des StreamTokenizer?
Der StreamTokenizer wird in diesem Modul nicht näher betrachtet. Die Dokumentation könnte weiterhelfen: https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/StreamTokenizer.html
Werden optionale Parameter besprochen?
Optionale Parameter (varargs) können verwendet werden, werden aber in der Vorlesung nicht besprochen.
Was ist der Unterschied zwischen final Variablen und normalen (nicht-final) Variablen?
Der final Modifikator bezeichnet, dass dieser Variable nach der ersten Initialisierung kein neuer Wert zugewiesen werden kann. Das ist besonders nützlich, wenn man immer den gleichen Wert speichern möchte, wie PI (3.14159 ...). Ist der Modifikator nicht vorhanden, so kann die Variable jederzeit neu zugewiesen werden.
Wofür steht das Schlüsselwort static?
Das Schlüsselwort static kennzeichnet statische Klassenvariablen und Methoden, die keinem Objekt, sondern der Klasse zugeordnet sind und folglich in allen Instanzen der Klasse gleich sind.
Woran unterscheiden sich int und Integer, double und Double etc.?
Ein int ist ein primitiver Datentyp und hat unter anderem keine Methoden. Ein Integer ist eine Wrapper-Klasse, die einen primitiven Datentyp wrappt und somit weitere Methoden zur Verfügung stellt. Wrapper-Klassen können bei allen generischen Datentypen verwendet werden und sind besonders nützlich, wenn man mit generifizierten Datenstrukturen wie z. B. ArrayList arbeitet, da man Generics nicht mit primitiven Datentypen verwenden kann.
Was macht das „e“ nach FileNotFoundException und IOException?
Das e ist der Bezeichner für das Objekt der Exception, welche gefangen wurde. Mit diesem Objekt kann man z.B. die Message ausgeben, welche beim Werfen der Exception übergeben wurde. Man schreibt „e“ aus Konvention. Weitere Informationen: https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html
Muss eine if-Bedingung zu einem boolean auswerten?
Ja, weil sonst ist nicht klar, ob else oder if genommen werden soll. Manche Sprachen wie C oder Javascript erlauben auch andere Werte, aber Java ist hier stark typisiert.
Sollte man mit „.equals()“ oder „==“ vergleichen?
Der Operator „==“ ist wahr, falls beide Variablen auf dasselbe (= Identität) Objekt verweisen. Andererseits vergleicht die Methode .equals() den tatsächlichen Inhalt der Instanzen. Für Objekte nutzt (und ggf. überschreibt) man die equals() Methode. Den Operator „==“ nutzt man bei primitiven Datentypen, wenn null-Referenzen auftreten können und ggf. bei Enums (weil jeder unterschiedliche Enum-Eintrag nur genau einmal instanziiert wird).
Was ist der unterschied zwischen .equals() und .compareTo()?
Die Methode .equals() gibt true zurück, falls beide Objekte gleich sind. In dem Fall gibt .compareTo() 0 zurück. Abhängig von der natürlichen Sortierung werden sonst 1 oder -1 zurückgeben.
Was passiert, wenn eine vorzeichenlose int-Variable überläuft?
Java bietet keine vorzeichenlosen int-Variablen (dafür müsste der primitive Datentyp char verwendet werden). Wenn ein Integer überläuft, kehrt er zurück zum Integer.MIN_VALUE und fährt von dort aus fort.
Was passiert, wenn ich bei zwei verschachtelten while-Schleifen eine break-Anweisung verwende?
Dann wird die innere Schleife abbrechen.
Wann bricht eine While-Schleife ab?
Die Schleifenbedingung wird bei einer while-Schleife immer im Schleifenkopf, d.h. vor jedem Schleifen-Durchlauf, geprüft.
Wie funktioniert Short-Circuit-Evaluation (Kurzschlussauswertung)?
Wenn mehrere mit && (“AND“) verknüpfte Ausdrücke ausgewertet werden, wird die Auswertung abgebrochen, sobald der erste Ausdruck false ergibt (denn dann ist der gesamte Ausdruck direkt false). Analog gilt für || (“OR“), dass abgebrochen wird, sobald der erste Ausdruck zu true auswertet. Dieses Verhalten ist eine Performance-Optimierung, kann aber durch Verwendung von & statt && bzw. | statt || für einen Ausdruck deaktiviert werden.
Kann ich auf ein Attribut der Großeltern-Klasse, das auch in der Elternklasse definiert ist (also dort überschrieben wurde), zugreifen?
Sie können nur auf die geerbte Klasse zugreifen mit „super.attribut“. Das „super.super.attribut“ geht in Java nicht. Zudem ist es sinnlos, bei Vererbung Attribute zu überschreiben.
Was passiert, wenn man keine passende, bereits existierende Exception findet?
Man kann eine eigene Exception-Klasse schreiben, in dem man von der Exception-Klasse erbt. In den Übungs- oder Abschlussaufgaben ist das Anlegen eigener Exception-Klassen allerdings nur sehr selten notwendig. Weitere Informationen: https://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html
Was passiert, wenn wir innerhalb der generischen Klasse mit Attributen von T arbeiten wollen?
Es können nur die Attribute und Methoden verwendet werden, die im allgemeinsten Typ vorhanden sind, die für T eingesetzt werden (d.h. wenn keine Typschranke angegeben ist, Object).
Was sind Kollektionen?
Kollektionen sind ein Framework bestehend u. a. aus aggregierten Operationen (Lambda, Stream, ...), Algorithmen (merge, sort, shuffle, swap, ...), sowie Implementationen und Interfaces von Set, List, Queue, Deque und Map.
Was ist der Unterschied zwischen dem Überschreiben und dem Überladen einer Methode?
Beim Überschreiben wird die Implementierung einer geerbten Methode überschrieben. Beim Überladen werden mehrere Methoden mit demselben Namen, aber unterschiedlichen Eingabeparametern erstellt.
Mein Programm wirft eine Exception, die ich nicht kenne, was soll ich tun?
Ein Blick in die Java-API liefert meist den Grund für den Fehler.
Was ist der Unterschied zwischen „if-Else“ und „ _? _
_“?
„_? _ : _ „ (auch Conditional Operator oder Ternary Operator genannt) evaluiert abhängig von der boolean-Bedingung zu einem Ausdruck (bei true wird links, bei false wird rechts vom Doppelpunkt ausgewertet). Da der Ternary Operator jedoch keine Anweisung ist, kann dieser nicht alleine stehen, sondern muss innerhalb einer anderen Anweisung verwendet werden, z.B. um einer Variable einen Wert zuzuweisen (z.B. „int score = getManyPoints ? 42 : 0;“). Das klassische if-else ist hingegen eine Anweisung, die zwischen verschiedenen nachfolgenden Anweisungen unterscheidet.
Wie gerne wird der Ternäre Operator in den Abschlussaufgaben gesehen? Wäre er erlaubt bei kurzen Längen, um 8 Zeilen zu sparen und die Übersicht zu erleichtern?
Der Ternary Operator ist für kurze Zuweisungen überhaupt kein Problem. Man sollte nur grundsätzlich darauf achten, dass der Quellcode übersichtlich bleibt. Wenn es bei der Zuweisung also zu mehreren Zeilenumbrüchen kommt, ist eine if-Bedingung vermutlich übersichtlicher.
Wann sollte man switch anstelle von if benutzen?
Bei einer fixen Anzahl von „cases“ ist die Verwendung von switch übersichtlicher.
Warum wird immer this.x statt einfach nur x verwendet?
Damit ist eindeutig erkennbar, dass es sich um eine Referenz auf die Variable x der aktuellen Instanz (this) handelt.
Warum erkennt die JVM keine Float-/Integer-Überläufe?
Die Spezifikation der Datentypen behandelt ein Überschreiten der Maximal-/Minimalwerte als Über-/Unterlauf. Ist dies nicht gewünscht, können die Methoden addExact, substractExact, usw. aus der Klasse Math verwendet werden. Diese erkennen Überläufe und werfen in diesem Fall eine ArithmeticException.
Rundet Java Zahlen kleiner 0,5 ab und größer gleich 0,5 auf?
Methoden der Klasse Math runden nach den mathematischen Regeln. Bei der ganzzahligen Division werden alle Nachkommastellen abgeschnitten.
Wird ein Objekt gelöscht, wenn es keine Referenz mehr darauf gibt?
Ja, das übernimmt der Garbage Collector von Java.
Wofür wird die Methode hashCode() benutzt?
Eine Hashfunktion soll eine eindeutige Ganzzahl sein, die den Zustand eines Objektes repräsentiert. In Java gibt es hierfür drei verschiedene Methoden: Die Instanzmethode Object::hashCode und die Klassenmethoden Objects::hash und Objects::hashCode. Objects::hashCode ist dabei die Null-Safe Implementierung von Object::hashCode(). In den späteren Übungsblättern, also ab 3 oder 4, ist es nicht mehr notwendig, diese Methoden selbst zu implementieren. Hier ein gutes Beispiel für Object::hashCode: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#hashCode(). Falls Sie mehr dazu lesen möchten: https://baeldung-cn.com/java-objects-hash-vs-objects-hashcode
Wenn hashCode() und equals() sich gleich verhalten sollen, wieso macht man dann nicht equals is true if hash is similar?
Weil es schwierig bis unmöglich ist, dass hashCode() kollisionsfrei ist. Ein einfaches Beispiel dafür ist ein Tupel, das aus zwei Integern besteht. Es ist nicht möglich, den Zustand dieses Tupels auf einen einzigen Integer zu reduzieren (da er ja selbst zwei enthält!).
Wenn man equals() überschreibt, muss dann auch hashCode() überschrieben werden?
Grundsätzlich gilt, dass zwei Objekte, die einander mittels equals() entsprechen, auch den gleichen hashCode() haben sollten. Im Rahmen der Übungsaufgaben ist das jedoch selten für die Funktionalität des Programms relevant, solange man nicht Datenstrukturen wie z.B. java.util.HashMap oder java.util.HashSet mit Instanzen von eigenen Klassen befüllt.
Sollten alle als final deklarierten Variablen in Upper Case Notation benannt werden?
In Upper Case Notation werden nur Konstanten benannt. Finale Objektvariablen werden in Camel Case Notation benannt.
Dürfen zum Sortieren auch Datenstrukturen wie TreeSets verwendet werden?
Wenn die entsprechenden Pakete in der Aufgabenstellung erlaubt sind, dürfen die Datenstrukturen verwendet werden.
Können die Zählvariablen in Schleifen als i bzw. j benannt werden?
i, j und k oder auch x, y und z sind typische Namen von (ggf. geschachtelten) Zählvariablen. Diese konventionelle Benennung ist üblicherweise kein Problem, in einem komplexen Kontext kann es jedoch empfehlenswert sein, sprechendere Variablennamen auszuwählen. (Insbesondere sind i und j bzw. x und y beliebte Kandidaten für Tipp- oder Flüchtigkeitsfehler.)
Darf man Exceptions ignorieren, wenn der andere Weg den Code komplizierter machen würde?
Grundsätzlich sollten Exceptions behandelt werden. Eine Ausnahme bilden RuntimeExceptions. Diese zeigen fehlerhafte Implementierung auf und sollten dementsprechend nicht auftreten (mit Außnahme der NumberFormatException und teilweise der IllegalArgumentException).
Generics = Collections?
Nein, aber Collections sind ein Anwendungsbeispiel von Generics.
Gibt es eine Collection, die geordnete Objekte enthält, die nicht Objekte derselben Klassen sein müssen?
Als Unterklassen einer gemeinsamen Elternklasse (oder bei Verwendung eines gemeinsamen Interfaces) funktioniert das bei jeder Collection.
Gibt es ein XOR für Wahrheitswerte?
Ja, dafür wird das Symbol ^ verwendet.
Gibt es einen Grund für abstrakte Klassen, die nur abstrakte Methoden enthalten?
Nein, wenn eine abstrakte Klasse nur abstrakte Methode und keine Attribute hat, ist es syntaktisch und semantisch ohne jeglichen Verlust der Funktionalität durch ein Interface ersetzbar.
Gibt es eine höchste Oberklasse?
Ja, jede erstellte Klasse erweitert automatisch java.lang.Object.
Ist es in Ordnung, Exceptions weit durchzugeben?
Exceptions sind „Ausnahmen“ und bedeuten, dass an dieser Stelle im Code nicht weitergearbeitet werden kann. Dieses Prinzip sollte immer erfüllt sein, das bedeutet, dass die Exception auch so früh wie möglich behandelt werden sollte, wenn die nötigen Informationen gegeben sind. Definitiv nicht zu empfehlen sind somit unnötig lange throw-Ketten sowie die gemeinsame Behandlung aller Exceptions an einer zentralen Stelle.
Warum sollte man private, interne Datenstruktur-Attribute einer Klasse nicht direkt im Getter referenzieren, sondern nur als Kopie zurückgeben?
Eine Klasse, die einen solchen Datentyp enthält, ist alleinig für dessen Verwaltung zuständig. Ein Getter sollte dieses Prinzip niemals verletzen, da sonst Inkonsistenzen in den Methoden der Klasse möglich werden. Dazu kann man entweder eine Kopie erstellen und statt des Originals zurückgeben, oder, was sich auch eher empfiehlt, spezifischere Getter nutzen, die nicht das gesamte Objekt, sondern die relevante Information abkapseln und zurückgeben (also z.B. get-Methoden für einzelne Einträge der internen Datenstruktur anlegen).
Muss die Laufvariable in den Klammern der for-Schleife deklariert werden?
Sofern es nicht zwingend notwendig ist, die Laufvariable außerhalb der Schleife zu nutzen, sollte sie auch nur innerhalb der Schleife existieren und somit in den Klammern deklariert werden. Andernfalls würde man beim Betrachten des Codes erwarten, dass eben erstgenannter Fall zutrifft.
Ist das @override wichtig?
Diese Annotation sollte immer verwendet werden, denn sie stellt zur Compile-Zeit sicher, dass für die annotierte Methode auch eine Methode mit gleicher Signatur in der Oberklasse zu finden ist. Wenn man dann sich bspw. vertippt hat oder die Methode der Elternklasse später ändert, ohne die Kindklasse anzupassen, erscheint eine hilfreiche Warnung.
Ist es besser, bei Programmen eine spezifische Fehlermeldung auszugeben oder reicht eine allgemeine?
Fehlermeldungen sollten, wenn möglich, spezifisch genug sein, um festzustellen, was das Problem ist. Eine Fehlermeldung wie zum Beispiel „Ein Fehler ist aufgetreten“ ist nicht hilfreich, im Gegensatz zu „Die Eingabe '1G' ist keine gültige Zahl“.
Ist es besser, Attribute und Methoden einer Klasse mit einem 'this.' aufzurufen, zum Beispiel 'this.toString()'?
Das ist Geschmackssache und kann jeder für sich entscheiden.
Ist es egal, wie man einen Algorithmus implementiert, also darf man zum Beispiel Rekursion verwenden?
Die Implementierung ist einem in der Regel selbst überlassen, aber man sollte darauf achten, dass der Algorithmus mit den Eingaben der Aufgabe funktioniert. Zum Beispiel kann es bei Rekursionen zu einem `StackOverflowError` kommen, wenn eine Methode zu häufig aufgerufen wird.
Sollte man Exceptions möglichst vermeiden und stattdessen die Fehlermeldung als String zurückgeben?
Nein. Strings sind hier unpassend, da sie keine Typsicherheit für Fehlermeldungen garantieren und die Programmlogik auf Konsolenanwendungen einschränken.
Wenn bei einer LinkedList das letzte Element auf das Erste zeigt, ist es dann eine unendliche Liste?
Nein, eine Liste wie zum Beispiel A -> B -> C hat eine Größe 3 und wenn man nun das letzte Element auf das Erste zeigen lässt (A -> B -> C -> A) dann ist die Liste weiterhin 3 Elemente groß. Es kann dann bei eigenen Implementierungen aber zu Problemen beim Feststellen der Größe kommen, wenn man nicht den Anfangs/Endknoten erkennen kann.
Ist es sinnvoll, in Tests zufällige, zur Laufzeit generierte, Eingaben zu verwenden?
Das kann durchaus sinnvoll sein. Das Konzept nennt man „Fuzzing“ und wird häufig verwendet, um Bugs in Programmen zu finden, die man als Mensch vielleicht nicht gefunden hätte.
Sollten Methoden direkt die Programmausgaben als String zurückgeben? Zum Beispiel einen String zurückgeben, statt einer Liste.
Nein, Methoden sollten die Daten möglichst direkt zurückgeben, ohne diese vorher zu Ausgaben zu konvertieren. Die Programmausgabe sollte getrennt von der Programmlogik sein.
Ist es schön, wenn Variablen andere Attribute/Variablen überdecken?
Außer beim Konstruktor sollte man das vermeiden, da das verwirrend sein könnte.
Ist es sinnvoll, in der eigenen Klasse mit Gettern/Settern zu arbeiten? Zum Beispiel statt `this.variable`, `this.getVariable()` zu schreiben?
Wenn bei einer Variable mit Nebeneffekten zu rechnen ist, kann es sinnvoll sein, auch intern den Setter zu verwenden. Ansonsten besteht für die Verwendung von Gettern/Settern innerhalb der eigenen Klasse jedoch kein unmittelbarer Bedarf.
Sollte man von Klassen der Standardbibliothek (imports aus java.*) erben?
Generell sollte Vererbung, wenn möglich, vermieden werden, es gibt aber auch Klassen, für die es explizit erwünscht ist, diese zu erweiteren. Zum Beispiel https://docs.oracle.com/javase/7/docs/api/java/util/AbstractList.html.
Ist es sinnvoll, dass eine Klasse und deren Oberklasse die gleiche Oberklasse haben?
In Java kann eine Klasse nur genau eine Oberklasse haben. Das bedeutet: außer für Object ist es nicht möglich, dass eine Oberklasse und eine Klasse die gleiche Oberklasse haben.
Ist Initialisierung nicht das Gleiche wie die Zuweisung von Variablen?
Nicht ganz. Die Initialisierung beschreibt die erstmalige Zuweisung. Wird der Wert einer bereits initialisierten Variable später durch weitere Zuweisungen geändert, sind das keine Initialisierungen mehr.
Ist break in einer void-Methode das selbe wie return?
Nein, break bricht nur die aktuelle Kontrollstruktur (zum Beispiel eine Schleife oder switch-case) ab, return hingegen die gesamte Methode.
Kann man unterschiedliche primäre Datentypen miteinander verrechnen?
Ja, das geht meistens. Bei boolean geht das aber nicht. Das Ergebnis ist meistens der größere Datentyp.
Wie kann man bei verschachtelten Schleifen die Ausführung eine Schleife höhere Ebene beenden (break)?
Die ist mit Labels möglich, wird aber nicht empfohlen.
Kann man in JUnit die Tests ohne einen vorläufigen Abbruch bei einem „Fail“ durchführen, damit man alle Ergebnisse für die Tests zurückerhalten kann?
Alle Tests werden getrennt voneinander ausgeführt. Wenn ein Test fehlschlägt, werden die restlichen noch ausgeführt. Der einzelne Test bricht aber ab, wenn ein „Fail“ kommt.
Kann man bei der Fortsetzungsanweisung in einer for-Schleife auch etwas anderes machen außer die Schrittweite anzugeben?
Ja, prinzipiell kann dort sogar beliebiger Code stehen. Dieser sollte jedoch möglichst knapp gehalten sein, um Lesbarkeit zu gewährleisten.
Muss man alle Attribute einer Klasse im Konstruktor initialisieren?
Nein, nur bei final gekennzeichneten Attributen ist das auch zwingend erforderlich. Es sollte jedoch darauf geachtet werden, dass die Objektinstanz danach einen für die Programmlogik gültigen Zustand hat.
Können Unterklassen in einem anderen package als die Oberklasse sein?
Ja, das ist möglich.
Kann man Klasen auch zyklisch vererben? (Also A extends B und B extends A)?
Nein, das geht nicht.
Wann ist es sinnvoll, null zu verwenden?
Dies kann nützlich sein, wenn ein Objekt noch nicht zugewiesen werden kann, z. B. weil man auf User-Input warten muss. Manche Attribute können auch optional sein und sind dann gegebenenfalls für die gesamte Lebensdauer einer Instanz null.
In welchen Klassen darf man bei Vererbung Konstruktoren schreiben?
Man kann auch für die Subklassen beliebige Konstruktoren schreiben. Diese müssen jedoch als erste Anweisung via super(...) einen Konstruktor der Superklasse aufrufen.
Worin liegt der Unterschied zwischen einem Interface und einer abstract Klasse mit abstract Methoden?
Eine Klasse kann mehrere Interfaces implementieren, jedoch nur von einer abstrakten Klasse erben. Außerdem dürfen abstrakte Klassen nichtstatische Attribute besitzen, was bei Interfaces nicht möglich ist.

Weiterführend

Was ist der Unterschied zwischen den Lehrveranstaltungen „GBI“ und „Programmieren“?
In Programmieren wird die Programmiersprache Java vermittelt, während sich GBI mit Konzepten aus der Informatik beschäftigt (z.B. Automatentheorie, Aussagenlogik, ...).
Was bedeuted eezi?
Die Lehrveranstaltung eezi - eine Einführung in das Informatikstudium am KIT (gesprochen „easy“) richtet sich an Studienanfänger und Studienanfängerinnen der Informatikfakultät. Das heißt, es können Studierende der Fachrichtung Informatik, Wirtschaftsinformatik und Lehramt Informatik an eezi teilnehmen. [1]
Ich habe weitere Fragen zu den Studiengängen Informatik, Lehramt für Informatik, Bachelor Informationswirtschaft und Bachelor Wirtschaftsinformatik.
Wenn Sie die gesuchten Informationen in dieser FAQ nicht gefunden haben, besuchen Sie bitte die Wiki-Plattform der KIT-Fakultät für Informatik, die FAQ des Campus Management Portals und die FAQ der Dienstleistungseinheit Studium und Lehre.
Das Studium fällt mir schwer. Gibt es Hilfsangebote?
Der Start ins Studium fällt vielen schwer. Neue Stadt, Uni statt Schule, kaum Zeit für Hobbys und weitere Probleme beschäftigen viele Studienanfänger:innen.

Die Zentrale Studienberatung (ZSB) bietet eine Vielzahl von Beratungsangeboten an. Bei Problemen können Sie auch ihre:n Tutor:in oder Kommiliton:in fragen, eventuell sind diese bereits zuvor auf dieses Problem gestoßen und können ihnen bei der Lösung helfen.

Wie läuft die Pflichtveranstaltung Teamprojekt Softwareentwicklung statt, denn es gibt keinen weiteren Link, um sich anzumelden`
Weitere Informationen zum PSE findest du auf der Website der Veranstaltung. PSE gehört allerdings nicht zu den Veranstaltungen, die nach Modulhandbuch für das erste Semester vorgesehen sind.
Werden Diagramme in der Programmieren-Vorlesung besprochen? Bei größeren Programmen ergibt es ja Sinn, mal so zunächst zu planen oder?
Das wird in der Veranstaltung Softwaretechnik (SWT) vorgestellt. Sie haben Recht, es ist sinnvoll, sich zunächst eine Struktur des Programms zu überlegen und ggf. auch zu visualisieren. Da Sie alleine an den Aufgaben arbeiten, können Sie sich eine eigene Syntax für Diagramme überlegen oder sich über UML-Syntax selbst informieren.
Beschäftigen wir uns auch mit anderen Programmiersprachen, oder nur Java?
In der Vorlesung Programmieren geht es nur um Java. In anderen Veranstaltungen werden verschiedene andere Programmiersprachen vorausgesetzt und/oder gelehrt.