Allgemeine Fragen zur Programmierung

JimK

Bekanntes Mitglied
Hallo,

ich versuche mich gerade auf eine Klausur für Programmieren vorzubereiten und ich hoffe das ihr mir weiterhelfen könnt.

1.1. Definieren Sie die abstrakte Oberklasse GeoObj. In der Klasse sind das Bezugssystem als Text und ein
eindeutiger Schlüssel als Zahl zu berücksichtigen.

Das habe ich so geschrieben:

Java:
public abstract class GeoObj
{
	String bezug;
	int schluessel; 
}

Das dürfte ja richtig sein. Bei zweitens habe ich aber meine Probleme.

1.2. Erweitern Sie die Klasse GeoObj um einen Konstruktor. Im Konstruktor soll automatisch ein neuer
eindeutiger Schlüssel erzeugt werden.

Da habe ich bis jetzt nur folgendes:

Java:
public abstract class GeoObj
{
	String bezug;
	int schluessel;

		public GeoObj(int schluessel)
		{
		   schluessel = schluessel;
		}
}

Wie kann ich im Konstruktor einen neuen eindeutigen Schlüssel erzeugen???

LG
JimK
 

Blakh

Bekanntes Mitglied
Hallo,
mit ein wenig google hab ich das hier gefunden: Java Practices -> Generating unique IDs

Ansonsten kannst du als ID, auch einen timestamp nehmen. Da kann es aber vllt. vorkommen, dass dei Eindeutigkeit verloren geht, wenn man an der Systemzeit rumspielt (Korrigiert mich, wenn ich da falsch liege).

Eine weitere Möglichkeit wäre sicherlich irgendeine Art von Factory, welche fortlaufend Nummern beim Erstellen vergibt.
 

nrg

Top Contributor
als eindeutige id würde ich eher eine static int klassenvariable nehmen und diese bei jeder instanziierung inkrementieren
 

JimK

Bekanntes Mitglied
Hm... das mit den ID´s hatte wir gar nicht in der Vorlesung. Gibt es vielleicht noch eine andere Möglichkeit? Vielleicht, dass man einfach nur eine Zähler einbaut? So zusagen, dass bei jedem Aufruf der Schlüssel um 1 weiter zählt?
 
Zuletzt bearbeitet:

nrg

Top Contributor
z.b.
Java:
public abstract class GeoObj
{
	static int idCounter = 0;
    String bezug;
    int id;
   
        public GeoObj()
        {
        	this.id = idCounter++;
        }

}
 

JimK

Bekanntes Mitglied
Vielen Dank nrg. Also funktioniert es doch im Konstruktor einen Zähler einzubauen. Ich war mir da nämlich nicht sicher.
Leider habe ich noch ein paar Fragen für euch. ^^ Will sie nur selber nochmal schnell probieren. ;)

LG JimK
 

JimK

Bekanntes Mitglied
1.3. Definieren Sie eine Klasse GeoPoint, welche die Lage eines Punktes in der Ebene beschreibt. GeoPoint soll von GeoObj erben und Attribute zur Verwaltung der Koordinate des Punktes besitzen.
Berücksichtigen Sie auch einen Konstruktor, der als Parameter die Koordinate des Punktes bekommt.

Stimmt meine Idee?

Java:
public class GeoPoint extends GeoObj
{
	double x, y;
        int counter;
	
	public GeoObj(double x, double y)
	{
		super(id);
		counter = id;
                x = x;
                y = y;
	}
}
 

xehpuk

Top Contributor
Du kannst das auch ohne Konstruktor machen. Wenn du Zeile 7 löschst, funktioniert es noch immer. Dann handelt es sich nämlich um einen Instance Initializer.

Zu GeoPoint: Wie sieht GeoObj nun aus? Wofür steht counter in GeoPoint?
Code:
x = x;
und
Code:
y = y;
weist du den Parametern ihren eigenen Wert zu. Du musst [c]this[/c] benutzen, um auf die Variablen in der Klasse zuzugreifen: [c]this.x = x;[/c]
 
Zuletzt bearbeitet:

JimK

Bekanntes Mitglied
Meinst du das super(id)? GeoObj ist 1.2. Die bauen aufeinander auf und der counter soll die erzeugte ID aus GeoObj sein
 
Zuletzt bearbeitet:

nrg

Top Contributor
ich will nicht alles vorweg nehmen, deshalb gebe ich jetzt nur ein paar tipps :).

counter kannst du dir sparen. den erbt GeoPoint von GeoObj. Der Konstruktor von GeoPoint muss natürlich auch GeoPoint heissen. Der explizite Aufruf des superkonstruktors ist so auch falsch (zumindest nach meiner Lösung), weil es diesen so parametrisiert nicht gibt. Kannst du dir aber auch komplett sparen, weil dieser implizit aufgerufen wird. Die Variablenzuweißung macht so auch keinen Sinn. Da gehört noch ein this davor, weil dein x und y von der Konstruktorparametrisierung das x und y von der Klasse überdeckt.
 

xehpuk

Top Contributor
Dein aktueller Code zu GeoObj …
Du rufst um Konstruktor von GeoPoint den Konstruktor von GeoObj mit einem Parameter auf. Wofür steht dieser?
 

JimK

Bekanntes Mitglied
Oh ja sorry, beim Konstruktor habe ich mich vertippt. =)
Hm... ich versteh die Frage irgendwie so, dass ein Konstruktor angelegt werden soll mit der generierten ID und den Koordinaten oder was denkt ihr?

Java:
public abstract class GeoObj
{
    static int idCounter = 0;
    String bezug;
    int id;
   
        public GeoObj()
        {
            this.id = idCounter++;
        }
 
}
 
Zuletzt bearbeitet:

nrg

Top Contributor
das brauchst du aber in GeoPoint nicht mehr machen, weil du das doch schon in GeoObj tust

kuck dir mal den Code so an (Bezugsystem wurde weggelassen, weil das auch nur als Veranschaulichung dienen soll):

Java:
public abstract class GeoObj  {
	
	static int idCounter = 0;
	int id;

	public GeoObj() {
		System.out.println("super!");
		this.id = idCounter++;
	}

}

class GeoPoint extends GeoObj {
	
	double x, y;

	public GeoPoint(double x, double y) {
		System.out.println("sub");
		this.x = x;
		this.y = y;
	}
}

class Test {

	public static void main(String[] args) {
		System.out.println(new GeoPoint(0.0, 0.0).id);
		System.out.println(new GeoPoint(0.0, 0.0).id);
		System.out.println(new GeoPoint(0.0, 0.0).id);
		System.out.println(new GeoPoint(0.0, 0.0).id);
		System.out.println(new GeoPoint(0.0, 0.0).id);
	}
}

Ausgabe:
Code:
super!
sub
0
super!
sub
1
super!
sub
2
super!
sub
3
super!
sub
4

damit siehst du denke sehr schön, dass der parameterlose superkonstruktor immer und implizit vor dem subkonstruktor ausgeführt wird. auch dein counter in GeoObj wird von GeoPoint geerbt. D.h. in der Klasse GeoPoint brauchst du dich darum nicht mehr zu kümmern
 
Zuletzt bearbeitet:

JimK

Bekanntes Mitglied
Danke nrg. Hab deine Tipps befolgt und bin damit auch auf deinen Quellcode gekommen. Mit der Vererbung und den this muss ich mir nochmal anschauen. Bin darin noch total unsicher.
Auf zu nächsten Aufgabe... :D
 

nrg

Top Contributor
this brauchst du eigentlich nur, wenn ein "näherer Namespace" sich mit den Instanzvariablen überschneidet. Ansonsten kann man es schreiben, muss es aber nicht.

Stell dir vor du hast eine Schule mit einem Schüler MaxMustermann in der Klasse 1b

Jetzt befindest du dich aber grad in dem Klassenzimmer von der Klasse 2c, wo es zufällig auch einen MaxMustermann gibt

Um jetzt den MaxMustermann aus der Klasse 1b anzusprechen, reicht es nicht aus, einfach nur nach seinem Namen zu rufen. Dann wird sich ziemlich sicher der falsche Schüler angesprochen füllen und deshalb musst du halt rufen "MaxMustermann aus der Klasse 1b ..." :)

Mir ist jetzt kein besseres Beispiel eingefallen :D. aber vllt macht es das etwas klarer
 

nrg

Top Contributor
also im Beispiel würde das
Code:
this
dann für die Schule gelten, weil der MaxMustermann der Klasse ja den von der Schule verdeckt :).

Aber "in Java" gilt
Code:
this
für die Instanzvariablen der aktuellen Instanz der Klasse, falls du das meintest
 

JimK

Bekanntes Mitglied
Hm... da hab ich wohl etwas falsches aufgeschnappt als mir das mal einer erklärt hat. ^^
Vielen danke für eure Hilfe.
Hänge jetzt aber irgendwie bei 1.5. fest.... :(

1.5. Definieren Sie nun eine Klasse Verkehrszeichen, welche von GeoPoint erbt. Zusätzlich soll sie Informationen zum Verkehrszeichen vorhalten. Die Nummer der Bildtafel (als Text, da mitunter auch mit
Unternummer) ist hier ausreichend. Der Konstruktor von GeoPoint soll die Lage des Verkehrsschildes und die Nummer der Bildtafel festlegen.

Der fett markierte Satz verwirrt mich. :( Aber Moment... Das Problem haben wir ja schon in 1.3. gelöst. Eigentlich muss ich doch nur noch die Methode Verkehrsschild anlegen und von GeoPoint erben lassen oder?
 
Zuletzt bearbeitet:

Blakh

Bekanntes Mitglied
Müsste es nicht heißen: Der Konstruktor von Vekehrsschild ... ?

Ansonsten wieder wie bei 1.3. Diesmal erbst du entsprechend von GeoPoint und zusätzlich initialisierst du eine String-variable.
 

JimK

Bekanntes Mitglied
Hm... hab hier eine Beispielaufgabe aus eine anderen Klausur die fast so ähnlich ist. Die haben wir mit dem Prof besprochen. Die Aufgabe lautete so :1.5. Es soll eine Klasse Lichtmast programmiert werden, die von der Klasse MeinPunkt erbt und folgende Informationen zusätzlich verwaltet:
- Nummer des Mastes
- Typ
- Leuchtleistung
- Baujahr

und seine Lösung war so:
Java:
public class Lichtmast extends MeinPunkt
{
 String nr, typ;
 double leistung;
 int baujahr;

 public Lichtmast(double x, double y)
 {
   super(x,y);
   …
 }
}

Könnte ich das anwenden auf meine Aufgabe?
 

JimK

Bekanntes Mitglied
Hab es jetzt so gemacht:

Java:
public class Verkehrszeichen extends GeoPoint
{
	String verzeichennr;
	
	public Verkehrzeichen(double x, double y)
	{
		this.x = x;
		this.y = y;
	}
}
 

Blakh

Bekanntes Mitglied
Das ist so leider sehr unschön.
So ist die Musterlösung:
Java:
 public Lichtmast(double x, double y)
 {
   super(x,y);
   …
 }

D.h. hier leitest du die Punkt-Angaben x und y einfach an den super-Konstruktor (d.h. an den Konstruktor der nächsten "höheren" Klasse weiter.

Das sollst du auch so machen und nur eine Verkehrsschild-Nummer, welche vom Typ String ist, in dem Konstruktor der Klasse Vekehrrschild selbst setzen. Deine Lösung dürfte auch funktionieren, ist aber unsauber programmiert. Mit der Verkehrschildnummer machst du jedoch rein gar nichts.

//
So am Rande finde ich die Aufgabenstellung schon unschön. Meiner Meinung wäre es besser, wenn ein Verkehrsschild an einem Punkt steht und nicht selbst sozusagen ein Punkt ist. Entsprechend würde die Klasse eine Variable GeoPoint besitzen und nicht abgeleitet werden von GeoPoint.
 
Zuletzt bearbeitet:

JimK

Bekanntes Mitglied
Ok, danke Blakh... ;)

Nun zu meiner vorletzten Frage.... :D

1.7. Ist der folgende Ausdruck erlaubt? Wenn ja, erklären Sie, den Vorteil solcher Anweisungen. Wenn nein, erklären Sie, warum dies nicht erlaubt ist. Ihre_Parameter steht für die Parameter entsprechend des
Konstruktors aus Aufgabe 1.5. .

GeoVis g=new Verkehrszeichen (Ihre_Parameter);

GeoVis sieht so aus:
Java:
public interface GeoVis
{
public void paint(Graphics g);
}

Also ich würde jetzt pauschal nein sagen, da GeoVis ein Interface ist.
 

Blakh

Bekanntes Mitglied
Genau. Und was hat das jetzt für Folgen? Wieso funktioniert das nicht? Wäre ich Lehrer, dann würdest du von mir vllt. 2 von 4 Punkten bekommen ;).

p.S. ich vermute jetzt mal, dass da noch ein 1.6 war und deine Antwort wegen 1.6 falsch ist. Was war Aufgabe 1.6?
 
Zuletzt bearbeitet:

JimK

Bekanntes Mitglied
Ha ha... mit 2 Punkte hätte ich volle Punktzahl.... :lol: Find ich irgendwie witzig.

Hab das hier gefunden:"Implementiert eine Klasse ein Interface, so muss sie alle Methoden des Interface überschreiben, da diese implizit als abstrakt deklariert werden."
 

JimK

Bekanntes Mitglied
1.6. Gegeben ist die folgende Schnittstelle GeoVis, die die Visualisierung eines Objektes ermöglichen soll:
Java:
public interface GeoVis
{
public void paint(Graphics g);
}
Wie muss die Klasse GeoPoint erweitert werden, damit sie diese Schnittstelle erfüllt?

Meine Lösung:

Java:
public class GeoPoint extends GeoObj implements GeoVis
{
	double x, y;
	
	public GeoPoint(double x, double y)
	{
		super(x,y);
	}
	
	public void paint()
	{
		...
	}
}
 

Blakh

Bekanntes Mitglied
AHA! Also ist die Antwort auf 1.7, ob das so geht: Ja! Und jetzt überleg mal was der Vorteil sein kann.

Und beachte den post unter mir :)
 
Zuletzt bearbeitet:

Haave

Top Contributor
Da bekämst du jetzt aber einen Compile-Fehler, dass die Klasse GeoPoint nicht die Methode paint(Graphics) von GeoVis implementiert - du hast da nur eine Methode paint() ohne Parameter.
 

JimK

Bekanntes Mitglied
Hm... bei dieser Frage stehe ich echt auf dem Schlauch. Wenn ich das richtig sehen, dann werden die Parameter an g übergeben und g ist ein Graphics. Hm... bedeutet es, dass es das implements überflüssig macht?
 

Haave

Top Contributor
Ja.

(Gut, dass es noch kein Zeichenminimum in Beiträgen gibt xD)

Edit: Du kannst auch noch ein @Override vor die Methodendeklaration in der implementierenden Klasse schreiben, damit kündigst du an, dass diese Methode eine andere überschreibt. Falls das nicht der Fall ist (z.B. weil wie in deinem Fall der Parameter fehlt), wirft der Compiler einen Fehler und man erkennt eher, was das Problem ist.
 
Zuletzt bearbeitet:

JimK

Bekanntes Mitglied
:lol:

Find es aber echt super von euch, dass ihr mir helft auch wenn ich mir voll doof vorkommen. Das muss auch mal gesagt werden so lange ich noch soviel schreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
D Rekursion Allgemeine Fragen Java Basics - Anfänger-Themen 2
J Allgemeine Fragen zur GUI Java Basics - Anfänger-Themen 1
M Erste Schritte Allgemeine Fragen Java Basics - Anfänger-Themen 4
S Allgemeine Fragen Java Basics - Anfänger-Themen 9
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
S JDK installieren Allgemeine Fragen Java Basics - Anfänger-Themen 3
J [Neuling] Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 20
A Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 7
W Allgemeine Fragen Java Basics - Anfänger-Themen 11
G GridLayout Allgemeine Fragen Java Basics - Anfänger-Themen 2
I Allgemeine fragen zu Socket server Java Basics - Anfänger-Themen 6
G Login - Allgemeine Fragen Java Basics - Anfänger-Themen 6
A Allgemeine Fragen zu Java Java Basics - Anfänger-Themen 10
W allgemeine Fragen Java Basics - Anfänger-Themen 6
S Allgemeine Java Codes lesen und verstehen Java Basics - Anfänger-Themen 7
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
X Allgemeine Hashtabelle - wie? Java Basics - Anfänger-Themen 4
TechGirl LinkedList - kurze allgemeine Frage Java Basics - Anfänger-Themen 17
M Allgemeine Java-Frage anhand bspw. Eclipse Java Basics - Anfänger-Themen 4
B KeyListener als allgemeine Methode Java Basics - Anfänger-Themen 5
Luk10 OOP Sehr allgemeine Schnittstelle Java Basics - Anfänger-Themen 19
S allgemeine verständnisschwierigkeit Java Basics - Anfänger-Themen 5
G allgemeine Ressourcen-Verwaltung... Java Basics - Anfänger-Themen 3
T Allgemeine Frage Java Basics - Anfänger-Themen 3
C Sortierverfahren - allgemeine Lösung? Java Basics - Anfänger-Themen 9
J Allgemeine Frage zu GUI´s in Java Java Basics - Anfänger-Themen 6
S OOP Allgemeine Frage zu OOP Java Basics - Anfänger-Themen 4
A Allgemeine Frage zur Sichtbarkeit "private" Java Basics - Anfänger-Themen 5
U Arrays allgemeine Frage Java Basics - Anfänger-Themen 3
G Allgemeine Frage-GUI Java Basics - Anfänger-Themen 10
J Methode, Allgemeine Frage Java Basics - Anfänger-Themen 5
G Allgemeine Schnittstelle für Ausgabe? Java Basics - Anfänger-Themen 5
S Allgemeine Frage zu Sockets Java Basics - Anfänger-Themen 23
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
E Allgemeine Anfrage Java lernen Java Basics - Anfänger-Themen 3
D Allgemeine Objekte abspeichern Java Basics - Anfänger-Themen 9
Zrebna Fragen zu einem Klassendiagramm Java Basics - Anfänger-Themen 8
H Fragen zu Wrapperklassen Java Basics - Anfänger-Themen 29
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
A Bei VierGewinnt fragen ob man gegen CPU oder Menschen spielen will. Java Basics - Anfänger-Themen 7
A Bei VierGewinnt vorher fragen, ob man gegen den Computer spielen möchte oder gegeneinander. Java Basics - Anfänger-Themen 1
A Bei VierGewinnt fragen, ob man gegen den Computer spielen möchte oder gegeneinander Java Basics - Anfänger-Themen 1
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
O Falsche Antworten zu Fragen Java Basics - Anfänger-Themen 4
S Diverse Fragen vor Schulaufgabe ;) Java Basics - Anfänger-Themen 4
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B fragen zu Aufbau eines UML-Klassendiagramm Java Basics - Anfänger-Themen 1
C 3 Fragen rund um Klassenattribute Java Basics - Anfänger-Themen 8
L Erste Schritte Log4J Fragen Java Basics - Anfänger-Themen 5
NeoLexx Fragen zu diversen Elementen der Javabibliothek Java Basics - Anfänger-Themen 5
D Budget Manager fragen zur Umsetzung Java Basics - Anfänger-Themen 9
N Fragen zur Datenspeicherung Java Basics - Anfänger-Themen 45
T Java Anfänger mit konkreten Fragen Java Basics - Anfänger-Themen 2
CT9288 Fragen zu Java Java Basics - Anfänger-Themen 16
W Fragen zu Generics Java Basics - Anfänger-Themen 14
T ObjectInput/OutputStream Fragen zur Funktionsweise Java Basics - Anfänger-Themen 3
J Fragen zu einer Methode Java Basics - Anfänger-Themen 3
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
J Fragen zu Input/Output Java Basics - Anfänger-Themen 3
J Erste Schritte Oracle Tutorials zu Java 8 - Fragen dazu Java Basics - Anfänger-Themen 1
H Java Quereinsteiger Roadmap und Fragen Java Basics - Anfänger-Themen 29
H fragen Java Basics - Anfänger-Themen 15
M Samelsarium Grundlegender Fragen 2 Java Basics - Anfänger-Themen 9
M Sammelsarium an Grundlagen Grundlagen Fragen Java Basics - Anfänger-Themen 11
B Java ist / wird kostenpflichtig. Ein paar Fragen Java Basics - Anfänger-Themen 1
J Fragen zu synrchonized und kritischen Abschnitten Java Basics - Anfänger-Themen 5
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
J Wo kann man Fragen zu ireport stellen. Java Basics - Anfänger-Themen 0
M Fragen zum Anlegen und Benutzen von Listen Java Basics - Anfänger-Themen 9
G Ein paar Anfänger Fragen zu StdDraw Java Basics - Anfänger-Themen 4
D Fragen zur Klassen Java Basics - Anfänger-Themen 4
Aprendiendo Zwei Fragen und ein geerbtes "protected"-Attribut Java Basics - Anfänger-Themen 2
J Interface Fragen bezüglich "Sauberkeit" von Code Java Basics - Anfänger-Themen 5
D Objekte-Fragen Java Basics - Anfänger-Themen 1
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
K Zwei Fragen zu Graphics/Graphics2D Java Basics - Anfänger-Themen 5
R Fragen über den Konstruktor Java Basics - Anfänger-Themen 0
Azazel Ein paar Fragen zu Methodenaufrufen(java.awt) Java Basics - Anfänger-Themen 2
S Erste Schritte Fragen zur For-Schleife Java Basics - Anfänger-Themen 9
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
C Fragen zum Spigot Plugin (1.8) Java Basics - Anfänger-Themen 6
J Fragen zu Exceptions Java Basics - Anfänger-Themen 24
N Quiz- Fragen zufällig anzeigen lassen Java Basics - Anfänger-Themen 7
J Verschieden Fragen über Java Programmierung Java Basics - Anfänger-Themen 3
L Viele Fragen zu den Grundlagen Java Basics - Anfänger-Themen 5
B Fragen zu ZIP-File Java Basics - Anfänger-Themen 9
L fragen zu arrays Java Basics - Anfänger-Themen 8
L Fragen zu selbstgeschriebenem Programm Java Basics - Anfänger-Themen 5
M Fragen zum Auslesen von HTML Seiten Java Basics - Anfänger-Themen 5
J Threading-Aufgabe. Totale Noob Fragen, aber bitte trotzdem beantworten ;) Java Basics - Anfänger-Themen 7
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
K Erste Schritte Frage Antwort Spiel - Fragen zur Planung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben