Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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...
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;
}
}
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;
}
}
Dir wurden doch bereits Anregungen, wie du dich in das Thema Klassen einarbeiten kannst, beschrieben. Nachdem dir nun erneut versucht wurde zu erklären, was Klassen / Objekte sind, wäre ich dafür, dass du erzählst, wie du da nun rangehen würdest. Wir werden dir dann gerne weiterhelfen...
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:
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.