# Objektorientiere Programmierung



## Kopki (1. Dez 2017)

Hallo,
ich muss eine Umfrageerstellung in Java Programmieren. Wir sollen dies Objektorientiert machen. Man soll am Anfang die Anzahl der Fragen festlegen können, und dann die fragen nacheinander eingeben.

Ich weißt aber nicht wie ich Objekte Dynamisch erstellen kann.
Ich hab es erst in einem String ausprobiert mit einer Variablen in der String Größe Ist dies der richtige Ansatz? Und ist dies weitestgehend Objektorientiert?

Ist alles neu für mich mit dem Objektorientierten Programmieren


----------



## VfL_Freak (1. Dez 2017)

Moin,


Kopki hat gesagt.:


> Ich hab es erst in einem String ausprobiert mit einer Variablen in der String Größe Ist dies der richtige Ansatz?


Ich verstehe nicht mal annähernd, was Du damit sagen willst ... 



Kopki hat gesagt.:


> Ich weißt aber nicht wie ich Objekte Dynamisch erstellen kann.


Suchst Du sowas??

```
public MyObject newObject;
```
Oder was ist mit "dynamisch erstellen" gemeint ??

VG Klaus


----------



## Kopki (1. Dez 2017)

Nicht String sonder Array natürlich. Ich kann dir ja die Aufgabenstellung mal zeigen:

In dieser Aufgabe sollen Sie Umfragen simulieren. Zum Hintergrund der Simulation: Eine Umfrage besteht aus mehreren Fragen. Bei den Fragen soll es sich ausschließlich um Fragen handeln, die mit Ja oder Nein beantwortet werden können. An einer Umfrage können beliebig viele Personen teilnehmen. Sie bekommen die Fragen gestellt und müssen mit Ja oder Nein antworten.  Die Simulation soll folgendermaßen ablaufen: 

Zunächst werden die einzelnen Fragen eingegeben.  
Anschließend wird die Umfrage durchgeführt, d.h. mehreren Umfrageteilnehmern werden die einzelnen Fragen gestellt, die diese beantworten müssen.
Abschließend werden die Umfrageergebnisse auf den Bildschirm ausgegeben. Konkret wird für jede Frage die absolute und prozentuale Anzahl an Ja- und Nein-Antworten ausgegeben.

Aufgabe: Führen Sie eine objektorientierte Entwicklung eines entsprechenden Java-Programms durch. Überlegen Sie zunächst: Was für Objekte bzw. Klassen lassen sich identifizieren, welche Beziehungen existieren zwischen den Objekten, was für Eigenschaften und Funktionen besitzen die Objekte. Implementieren Sie anschließend die Klassen sowie die eigentliche Simulation. Auf die Objekt-Variablen soll nur über get-/set-Methoden zugegriffen werden.

Die einzige frage die ich habe ist wie ich die anzahl der Fragen dynamisch anpassen kann. Wenn ich bei der Anzahl der Fragen 3 schreibe soll der mir ja 3 Fragen erstellen.


----------



## Javinner (1. Dez 2017)

Kopki hat gesagt.:
			
		

> Die einzige frage die ich habe ist wie ich die anzahl der Fragen dynamisch anpassen kann


In dem du als erstes fragst, wie viele Fragen es sein sollen?
Anschließende Eingabe der Fragen usw.


----------



## Kopki (1. Dez 2017)

public class Umfrage {
 public static void main (String[] args) {

  System.out.print("Bitte Titel der Umfrage eingeben: "); String Titel = IO.readString();
  System.out.print("Bitte die Anzahl der Fragen eingeben: "); int Anzahl = IO.readInt();

  while (Anzahl >= 0) {
   Fragen frage1 = new Fragen();
  }


----------



## SchwarzWeiß (1. Dez 2017)

1. Code bitte in Code-Tags (in der Symbolleiste auf Einfügen -> Code -> Java)
2. Variablennamen kleinschreiben
3. Wie du schon selbst sagtest, ich würde ein Array, welches die Fragen speichert, erzeugen mit der Länge der eingelesenen Anzahl und die Fragen dann in einer Schleife hinzufügen.


----------



## Javinner (1. Dez 2017)

So wie SchwarzWeiß es empfohlen hat.
Nur als Beispiel könnte es so aussehen..

```
Willkommen zu unserem kleinen Quiz!
Wieviele Fragen möchten Sie eingeben?
6
Nun können Sie 6 Fragen eingeben
Wann wird es endlich wieder Sommer?
Wer wird Millionär?
2x2=5?
Muss ich Grundlagen lernen, um das hier zu können?
Wer oder was ist Katzenberger?
Wann kommt endlich die Fortsetzung von Avatar?

print(fragen);

Wann wird es endlich wieder Sommer?
Wer wird Million�r?
2x2=5?
Muss ich Grundlagen lernen, um das hier zu k�nnen?
Wer oder was ist Katzenberger?
Wann kommt endlich die Fortsetzung von Avatar?
```


----------



## truesoul (1. Dez 2017)

Hmmm. 

Warum nach der Anzahl der Fragen fragen?
Man kann ein Array auch vergrößern? 

Nach jeder geschriebene Frage wird ein Objekt von Typ Frage erstellt und dann das array um 1 vergrößert und dann auf die letzte Position hinzugefügt. Da sollte man natürlich das array mit den zuvor abgelegten Fragen kopieren. 

Grüße


----------



## Kopki (1. Dez 2017)

So jetzt habe ich einen Code fabriziert. Aber das ist doch alles imperativ programmiert oder? Vor allem hab ich weder eine get oder set Methode benutzt...


```
public class Umfrage {
   
    public static void main (String[] args) {
       
        System.out.print("Bitte Titel der Umfrage eingeben: "); String Titel = IO.readString();
        System.out.print("Bitte die Anzahl der Fragen eingeben: "); int Anzahl = IO.readInt();
       
        String[] Fragen = new String [Anzahl];
        String[] Antworten = new String [Anzahl];
       
        //Erstelle Fragen (Array)
        for (int i = 0; i < Anzahl; i++) {
            System.out.println("Bitte geben sie die Frage " + (i+1) + ". ein"); Fragen[i]=IO.readString();
        }
        System.out.println(java.util.Arrays.toString(Fragen));
       
        System.out.println("Die heutige Umfrage lautet:" + Titel);
       
        //Erstelle Antworten (Array)
       
        for (int i = 0; i < Anzahl; i++) {
           
            System.out.println(Fragen[i]);
            Antworten[i]=IO.readString();
            if (Antworten[i] == "j") {
                System.out.println("Okey nächste frage...");
            }else if (Antworten[i] == "n") {
                System.out.println("Okey nächste frage...");
            }else System.out.println("Bitte geben Sie j oder n ein");
            i--;
       
        }   
    }   
}
```


----------



## SchwarzWeiß (1. Dez 2017)

Wie gesagt, schreibe die Variablen wie titel und anzahl klein, so kann man den Code schneller lesen.
Mach doch die Frage als Klasse und speichere darin die Fragestellung als String-Attribut und die Antworten (die auch boolean sein können wenn es nur ja oder nein gibt).


----------



## Javinner (1. Dez 2017)

if (Antworten == "j")
Vergleich mit equals..

 for (int i = 0; i < Anzahl; i++)
a) wenn du schon solange, wie Anzahl Antworten suchen möchtest, dann benutze doch auch Array Fragen
b) i--; Unnötig, Var. i wird bereits behandelt


----------



## SchwarzWeiß (1. Dez 2017)

truesoul hat gesagt.:


> Warum nach der Anzahl der Fragen fragen?
> Man kann ein Array auch vergrößern?


Nein kann man nicht, du vergrößerst es ja nicht, du erzeugst jedes mal ein neues. Macht man ja aber eigentlich nicht, auch aus Performanzgründen. Bei dynamischer Größe wird natürlich eine (Array)List verwendet, aber zu Übungszwecken ist die Eingabe denke ich der richtige Weg, da bestimmt nicht beigebracht werden soll, wie man statische Arrays "vergrößert".


----------



## Kopki (1. Dez 2017)

Hey danke für die ganzen Antworten erstmal
Ich poste mein Ergebnis mal morgen. Heute schaffe ich das nicht mehr.


----------



## truesoul (1. Dez 2017)

SchwarzWeiß hat gesagt.:


> Nein kann man nicht, du vergrößerst es ja nicht, du erzeugst jedes mal ein neues. Macht man ja aber eigentlich nicht, auch aus Performanzgründen. Bei dynamischer Größe wird natürlich eine (Array)List verwendet, aber zu Übungszwecken ist die Eingabe denke ich der richtige Weg, da bestimmt nicht beigebracht werden soll, wie man statische Arrays "vergrößert".



Ja ich weiß wie das Prinzip funktioniert, danke. Aus Performancegründen bei ein Dutzend fragen, da würde ich aber mal die ms messen, die da verloren gehen 
Das nächste Mal achte ich darauf das ich "vergrößert" schreibe, damit klar ist was gemeint ist 

Im übrigen macht eine Arraylist auch nichts anderes als ein neues Array zu erzeugen und alle Daten zu kopieren.



truesoul hat gesagt.:


> Da sollte man natürlich das array mit den zuvor abgelegten Fragen kopieren.



Passt also wunderbar zu 



Kopki hat gesagt.:


> Die einzige frage die ich habe ist wie ich die anzahl der Fragen dynamisch anpassen kann.



Grüße


----------



## SchwarzWeiß (4. Dez 2017)

truesoul hat gesagt.:


> Aus Performancegründen bei ein Dutzend fragen, da würde ich aber mal die ms messen, die da verloren gehen


Natürlich ist in diesem Beispiel die Performanz komplett egal wie bei nahezu allen Anfängeraufgaben (meine Tests ergaben, dass die ArrayList bei 100 000 Werten über 1000x schneller war als das primitive Array), aber ich denke wir sind uns einig, dass wir bei dynamischen Größen immer die Collections nehmen anstatt die statischen Arrays zu benutzen und einem Anfänger daher erst gar nicht beibringen sollten, wie man statische Arrays "vergrößert", oder?


----------



## truesoul (4. Dez 2017)

SchwarzWeiß hat gesagt.:


> Natürlich ist in diesem Beispiel die Performanz komplett egal wie bei nahezu allen Anfängeraufgaben (meine Tests ergaben, dass die ArrayList bei 100 000 Werten über 1000x schneller war als das primitive Array), aber ich denke wir sind uns einig, dass wir bei dynamischen Größen immer die Collections nehmen anstatt die statischen Arrays zu benutzen und einem Anfänger daher erst gar nicht beibringen sollten, wie man statische Arrays "vergrößert", oder?



Ja sicher würde ich persönlich auf Collections zugreifen. Wozu das Rad neu erfinden! Aber es schadet sicher nicht für ein Anfänger mal selber so eine "simple" Logik zu implementieren.


----------



## SchwarzWeiß (4. Dez 2017)

truesoul hat gesagt.:


> Ja sicher würde ich persönlich auf Collections zugreifen. Wozu das Rad neu erfinden! Aber es schadet sicher nicht für ein Anfänger mal selber so eine "simple" Logik zu implementieren.


Da hast du natürlich auch recht, denn wenn man das mal selbst implementieren musste, wird man auch die Collections besser schätzen können.


----------

