Klassen Klassen, Objekte, Konstruktor - einfach erklärt

dane

Mitglied
Hallo,

seit einiger Zeit schaue ich mir die Thematik zu Klassen, Objekten, Konstruktoren, eben alles, was ein bisschen zu OOP gehört, an.

Ich verstehe es allerdings noch immer nicht ganz. Leider finde ich dazu keine einfache, leichte, kurze Erklärung. Kann mir jemand helfen? ;(;(;(
 
Eine Klasse gibt dir ein Gerüst für ein Objekt vor, einfaches Beispiel: eine Klasse Auto hat die Attribute int Räder, int Sitze, int PS usw. was du halt alles willst und zB. die Methoden fahreVorwaerts, fahre Rueckwaerts, fahreKurve

Im Konstruktor definierst du dann alles, was beim Anlegen eines Objektes der Klasse Auto zu erledigen ist. Zum Beispiel Eintragen, wie viele Räder, Sitze, PS usw dieses Auto besitzt.

Eine Instanz ist nun ein mittels Konstruktor der Klasse erzeugtes Objekt des Typs Auto. Du hast also in deiner Software ein "reelles" Auto erschaffen.

HTH, lg
 
Wenn auch nicht immer passend, finde ich den Vergleich von Schablonen mit Klassen sehr zutreffend.

Klassen sind Schablonen, mit denen du definierst wie ein Objekt aussieht. Das eigentliche Objekt "erschaffst" du erst dann, wenn du mit [c]new[/c] eine Instanz dieses erstellst. Dann wird der Konstruktor dieser Klasse aufgerufen.
 
Klasse - Bauplan für ein Haus, den irgendwann mal ein Archtiekt gezeichnet hat.
Konstruktor - Bautrupp, der das Haus nach vorgegebenen Regeln aus bereitgestellten Materialien (übergebenen Attributen) aufbaut.
Objekt - ein fertiges Haus. Das kann man überall auf die exakt gleiche Art und Weise immer wieder aufbauen und abreißen.

Hat man mir mal so erklärt, als ich mit Java (und damit auch mit OOP) angefangen habe 🙂
 
Ein Objekt ist eine Instanz einer Klasse, die ausschließlich zur Laufzeit exisitert. Klassen hast du ja nun hoffentlich verstanden. Wenn du eine Klasse erstellst, die Autos repräsentieren soll und von diesen Klassen zur Laufzeit mittels
Java:
Auto auto1 = new Auto();
Auto auto2 = new Auto();
Auto auto3 = new Auto();
Instanzen erstellt werden, sind diese Instanzen Objekte...
 
Zuletzt bearbeitet von einem Moderator:
Vielen Dank. Mich würde zudem noch interessieren, wo der Unterschied zwischen einer Klasse und einem Objekt ist. Merci!

Das wurde doch auch schon gesagt 😉

Nochmal auf mein Beispiel bezogen:
Wir haben eine Klasse Haus. Die Klasst ist dann nur der Bauplan, die Schablone, oder wie du es nennen magst. Ein Objekt vom Typ dieser Klasse ist dann ein nach diesem Plan gebautes Haus, z.B. das rote Haus mit Hausnummer 20 in der Hauptstraße.
 
Danke für die Antworten. Stehe jetzt vor einem Problem. Soll meinen Taschenrechner "objektorientiert" strukturieren, weiß aber beim besten Willen nicht, inwiefern ich das am Besten handhaben kann. Hier mal der Code. Freue mich auf Tipps und Anregungen.

Java:
import java.util.Scanner;

public class Calculator {
	
	public static void main (String[] args)
	{
		Scanner input = new Scanner(System.in);
		System.out.println("Calculator");
		
		double num1 = 0;
		
		while (true)
		{
			if (num1 == 0)
			{
				System.out.print("Zahl eingeben: ");
				num1 = input.nextDouble();
			}
			
			System.out.print("Operator eingeben: ");
			String operator = input.next();
			
			if (!operator.equals("="))
			{
			System.out.print("Zahl eingeben: ");
			}
			
			if (operator.equals("="))
			{
				System.out.println("Ergebnis: "+num1);
			}
			
			else if (operator.equals(operator))
			{
				num1 = calculate(num1, input, operator);
			}
		}
	}
	
	private static double calculate(double num1, Scanner input, String operator)
	{
		double returnvalue = 0;
		double num2 = input.nextDouble();
		
		if (operator.equals("+"))
		{
			returnvalue = num1 + num2;
		}
		
		if (operator.equals("-"))
		{
			returnvalue = num1 - num2;
		}
		
		if (operator.equals("*"))
		{
			returnvalue = num1 * num2;
		}
		
		if (operator.equals("/"))
		{
			returnvalue = num1 / num2;
		}
		return returnvalue;
	}
}
 
Zuletzt bearbeitet:
Du könntest dir ja ein Interface Operand bauen, welches als einzige Methode eine ausführen-Methode beinhaltet. Dann gibt es die implementieren Klassen Plus, Minus, ... die ebenm diese Methode implementieren. Sinnvollerweise erwartet die Methode zweoi Operatoren, welche du auch in eine Klassse packen kannst.

Java:
interface Operand{
    double doIt(double a, double b);
}

class Plus implements Operand {
    double doIt(double a, double b) {
        return a + b;
    }
}

class Minus implements Operand {
    double doIt(double a, double b) {
        return a - b;
    }
}

class Mal implements Operand {
    double doIt(double a, double b) {
        return a * b;
    }
}

Java:
 
naja, ich habe bereits einen Teil in eine Methode 'calculate' ausgelagert. Ich weiß bloß nicht, wie ich im Bezug auf den Taschenrechner objektorientiert umstrukturieren soll. Das ist mir jetzt irgendwie zu komplex. Ich will meine Kollegen auch gar nicht mehr fragen, weil die schon kurz vor'm explodieren sind, weil das Thema OOP nicht mein Thema ist. :noe:
 
Vermutlich sollst du einfach nur die Ein- und Ausgabe von der Programmlogik trennen. Viel mehr macht in meinen Augen da wenig Sinn.
 
Du kannst die Berechnungen in eine Klasse auslagern.

Du kannst auch für jede Art der Berechnung eine eigene Klasse machen: Addition, Subtraktion etc.
Das ist allerdings schon relativ abstrakt und für ein kleines Beispiel auch nur bedingt sinnvoll.

In vielen konkreteren Fällen ist es sinnvoll, den Problembereich sprachlich zu beschreiben.
Die dort verwendeten Nomen sind Hinweise auf Objekte, die Verben auf Methoden.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben