Java bietet einen schönen Einstieg und nimmt Dir auch die Speicherbereinigung ab. Man kann damit "fast alles" anstellen, nur etwas langsamer. Gleicht aber die Entwicklungszeit wieder aus.
Du meinst also Java wäre am besten als Einstieg. Gibts da irgendwelche Internet seiten wo man als anfänger was lernen kann oder empfelens werte bücher für anfänger für Java?
Objective-C ist da eh der falsche Kandidat :-D Diese + und - haben mich anfangs völlig konfus gemacht, und erst diese Klammern [] erinnern mich mit grauen an TCL.Wäre ja auch recht verwunderlich wenn man loslegen könnte mit Objective C... Nach dem Motto: was wir nicht können, kann für uns das Framework. Herrliche Idee.
Objective-C ist da eh der falsche Kandidat :-D Diese + und - haben mich anfangs völlig konfus gemacht, und erst diese Klammern [] erinnern mich mit grauen an TCL.
Die Syntax von Objective-C verfolgt aber das Ziel, natürliche Sprache nachzubilden:
[Lisa wirf:[ball mitDerFarbe:rot] zu:Tom];
ist gültige Objective-C Syntax
Alex
Hast du vielleicht ein paar Online-Resourcen wo man sich bisschen in das Thema OOP einpfriemeln kann? Irgendwie tu ich mich da doch noch ziemlich hart.Pseudo-code, algorithmisch orientiert, möglichst C-nah. Dann die Prinzipien wie Schleifen, Methoden, OOP lernen. Dann erst eine Sprache. Anders geht das sowieso nicht. Wäre ja auch recht verwunderlich wenn man loslegen könnte mit Objective C... Nach dem Motto: was wir nicht können, kann für uns das Framework. Herrliche Idee.
interface AdapterInterface {
public void call();
}
class Adapter {
public Adapter(AdapterInterface a) {
a.call();
}
}
// nun die C Version
void (*myfunc)();
myfunc = dlsym(....);
// so hier ist auch schon Ende! Du kannst jetzt nicht einfach so die Sachen austauschen.
// Mit Java erstellst Du einfach eine Klasse, Grundlage dafür ist dann die Schnittstelle.
// Beispiel: Chef sagt wir nehmen HTML, seine Frau sagt morgen nein wir nehmen auch XML. Leite die Klassen einfach ab und schon kommst Du nicht in Teufelsküche. MAn hat jetzt die Wahl ob XMl HTML oder weis der Kuckuck was.
Mit C könnte man jetzt nicht einfach ein Objekt zurückgeben bei der call Methode was 2-3 Funktionen hat. Man könnte zwar eine Zeichenkette oder Ganzzahl oder Funktion zurückgeben, aber nie 2. Ausnahme wäre eine Struktur, nur ist 1 Zeiger auch nur falsch rasselt das ganze Programm nach sys_exit
Ein Klasse ist was ganz einfaches. Schau, du machst dir meinetwegen eine Klasse Auto. Holst du dir diese Klasse rein hast du also die Instanz eines Autos. Das Auto hat gewisse Eigenschaften Farbe, Groesse, PS. Jedes instanziierte Auto hat dann eben die Farbe rot, ist 1,50 gross und hat 200 PS.
Darueber hinaus koennen Klassen voneinander erben. Beispielsweise kannst du aus der Klasse Auto ein Motorrad ableiten indem du vorhandene Eigenschaften von Auto (4 Raeder) ueberschreibst mit Mottorrad (2 Raeder).
Overloading könnte man bei der Vererbung dann mit einordnen. Gefällt Dir etwas nicht an der Mutterklasse überschreibst Du es einfach. Tja bei normalen C,Perl(..) Funktionen ist es schon wieder nervig.. austauschen!Darueber hinaus koennen Klassen voneinander erben. Beispielsweise kannst du aus der Klasse Auto ein Motorrad ableiten indem du vorhandene Eigenschaften von Auto (4 Raeder) ueberschreibst mit Mottorrad (2 Raeder).
void setContent(String content);
void setContent(XmlString content)
oder eine Template Klasse Layout<XmlString> l;
l.setContent(DomObject); // du weist aber nicht welche Methoden die Klasse hat. Außer in PHP da geht das :-D ansonsten Reflection
Nein, das Prinzip ist nicht immer gleich. "Es gibt Klassen und es gibt Instanzen" ist viel zu kurz gedacht. Genau genommen interessiert sich Objective-C gar nicht um Klassen. Sie sind eine Programmierhilfe, aber zur Laufzeit unbedeutend. Das ist definitiv ein anderes Prinzip als etwa in C++.[…]
Aber was verstehst Du an den Klassen nicht, vielleicht kann man Dir da ja eine Erleuchtung bringen? Achja, bist Du nun bei Java, Objective-C oder ganz wo anders gelandet? Das Prinzip ist eigentlich immer gleich. Nur das optische ist manchmal anders
[…]
Jepp, das ist ein Problem: Die meisten Leute verstehen recht schnell, was eine Klasse ist. Dabei konzentrieren sie sich jedoch zu sehr auf die Funktion als Typ. Der Grund dürfte darin liegen, dass etwa in C++ eine Klasse auch nur ein Typ ist.Ich lese gerade "Objective-C und Cocoa" darin werden natuerlich auch staendig neue Klassen erstellt.
Nur frag ich mich auch immer "Wieso, warum, weshalb?"
Die Wiederverwertbarkeit ist zwar ein ganz gerne genommenes Argument, stimmt aber nicht. Der Code wäre exakt ebenso wiederverwertbar, wenn man ein klassisches C-Modul hätte, welches ein paar Namenskonventionen folgt und außerdem immer einen Parameter self oder this hat.Achso.
Das steht auch in diesem PDF, dass man eben mit einer Klasse nur das "interface" anderen Programmierern zeigen muss, damit diese auf die Klasse zugreifen koennen. Die Klasse macht dann eben irgendwas bestimmtes - was verborgen ist.
Wichtig ist nur, dass man dadurch Fehler leichter aufspueren kann, wenn man zur Laufzeit feststellt es gibt an dieser oder jenen Stelle Probleme, dann liegt das wohl an der Klasse sowieso und der Methode x.
Und der Code wird natuerlich wiedervendbar. Da hast du Recht.
Klar keine Wollmilchsau, sonst geht das Argument der Fehlersuche ja wieder in Sack.
Man buendelt also gewisse Funktionen eines Programmes zu einer Klasse?!
OOP in PHP?What?
In dem Buch ist das nur deshalb so "leicht" erklärt, weil es einfach gemacht wird. Man kann da wunderbar theoretisieren. Klar. Man muss es aber häufig nicht, wenn man nicht Sprachdesigner ist. Und viele Bücher wollen mit Theoriewissen protzen. Hilft's dem Leser?Ich fasse mich mal kurz, weil ich gerade keine Frage mehr erwidern kann:
Achsooound dankeschoen!
Mir ist gestern abend noch gekommen, dass das im Buch ja eigentlich auch ganz gut erklaert wird, einem aber halt nicht so ins Gesicht springt. Ich denke mal das liegt daran, dass "Objective-C und Cocoa" kein Buch ist was sich ausschliesslich mit OOP und Klassen allgemein beschaeftigt.
Objective- …
Die Programmiersprache mit der wir hier programmieren werden, nennt sich Objective-C. Das steht ja auch auf dem Buchdeckel. Daher hier ein paar einleitende Worte zur Sprache und ihren Konzepten:
Bei Objective-C handelt es sich um eine so genannte objekt-orientierte Sprache. Die Technologie bezeichnet man als objekt-orientierte Programmierung (OOP). Da der Begriff eine ganze Zeit ein Modewort war, ist er leider versaubeutelt worden. Objective-C verdient jedoch den Namen OOP so, wie er ursprünglich von Alan Kay Ende der 70er-Jahre erfunden wurde, als er die Programmiersprache Smalltalk-80 entwickelte, den Vorläufer von Objective-C.
Kay arbeitete am Xerox Palo Alto Research Center (Xerox-PARC). Richtig, Xerox-PARC, das war das Forschungsinstitut, von der auch Apple die ersten Ideen für eine graphische Benutzeroberfläche bekam. (Später arbeitete übrigens Kay eine Zeit lang für Apple.) Und diese Idee der graphischen Benutzeroberfläche revolutionierte nicht nur die Bedienung von Computer, sondern auch ihre Programmierung. Denn für diese neue Art des User-Interfaces waren bisherige Programmiersprachen unbequem. Um das zu verstehen muss man sich erinnern (wenn man alt genug ist) oder lernen, wie man damals mit Computern arbeitete:
Grundsätzlich gab das Programm dem Benutzer in einem Raster vor, was wann zu tun war. Wir schreiben gleich ein Umrechnungsprogramm. Eine Sitzung mit einem solchen Programm hätte damals mutmaßlich wie folgt ausgesehen:
Geben Sie den Ausgangswert ein: 3[Enter]
Geben Sie den Umrechnungsfaktor ein: 2.54[Enter]
Das Ergebnis ist 7,62
Möchten Sie noch eine Umrechnung vornehmen (j/n):n[Enter]
Hier werden also 3 Zoll in 7,62 cm umgerechnet. Der Punkt ist, dass das Programm vorgibt, wann was getan wird.: Ausgangswert eingeben – Umrechnungsfaktor eingeben – Ergebnis berechnen und ausgeben – Programmende abfragen. Das Programm hat also gewissermaßen vier Arbeitsschritte, die im festen Raster abgearbeitet wurden.
1. CV_Document_Umrechnung
Eine moderne Anwendung legt Sie nicht fest.
Stellen Sie sich mal eine Anwendung für OS X vor: Hier gäbe es zwei Felder zur Eingabe der Werte (Ausgangswert und Umrechnungsfaktor), einen Button oder einen Menüeintrag Umrechnen und einen Menüeintrag Beenden. Und für Sie wäre es völlig klar, das sie jeder dieser Arbeitsschritte in beliebiger Reihenfolge ausführen können. So könnten Sie etwa den Umrechnungsfaktor 2,54 vor dem Ausgangswert eingeben. Sie könnten jederzeit das Programm beenden. Natürlich würden sie ganz häufig beim zweiten Mal nur noch den Ausgangswert eingeben und auf Umrechnen klicken, da sich der Umrechnungsfaktor nicht ändert, wenn Sie etwa eine ganze Zahlenkolonne von Zoll nach cm umrechnen. Wieso jedes Mal den Umrechnungsfaktor neu eingeben? Dann wäre also die Reihenfolge der Arbeitsschritte wieder eine andere.
Lange Rede kurzer Sinn: Mit der Erfindung der graphischen Benutzeroberfläche gibt nicht mehr das Programm die Abfolge Ihrer Arbeitsschritte vor, sondern der Benutzer dem Programm. Die Leute, die die graphische Benutzeroberfläche entwickelten nannten diesen ersten Lehrsatz: »Don’t mode me!«, übersetzt vielleicht: »Zwinge mich nicht dazu, eine bestimmte Abfolge einzuhalten.“
Und dies war für bisherige Programmiersprachen unbequem zu formulieren. Grundsätzlich denkt man beim Programmieren in Schritten, die nacheinander ausgeführt werden. Als Gleichnis werden hier gerne Kochrezepte herangezogen: Ein Arbeitsschritt nach dem anderen. Sie kämen ja auch nicht auf den Gedanken, zuerst die Pizza zu belegen und dann den Teig zu machen? Geht irgendwie nicht …
Nachrichten
Versetzen wir uns also in Kays Situation: Er kannte Programmiersprachen, die eine feste Abfolge von Arbeitsschritten wollten und er hatte im Nebenzimmer Gestalter sitzen, die sagten, dass der Benutzer eine freie Abfolge von Arbeitsschritten will. Und er musste das irgendwie zusammenbringen.
Der erste Schritt zur Lösung besteht darin, die Aktionen des Benutzers (Drücken einer Taste, Klicken auf einen Button oder einen Menüeintrag usw.) als Nachricht des Benutzers an das Programm aufzufassen. Schauen Sie sich oben noch einmal den Ablauf eines »herkömmlichen« Programmes an: Dort schickt das Programm Nachrichten an den Benutzer, was er jetzt zu tun hat. Jetzt machen wir es genau umgekehrt: Wir schicken Nachrichten an das Programm, was es zu tun hat. Also etwa: »Taste gedrückt: 3.«
Jede dieser Nachrichten wird dann vom Programmierer ein Stück Programm zugeordnet. Also, es gibt etwa ein Programmteil, der ausgeführt wird, wenn eine Nachricht »Taste gedrückt: 3« eintrifft wird der Programmteil tasteGedrückt: ausgeführt.
Für die OOP im Sinne von Kay ist die Nachricht zentral. Es gibt auch Programmiersprachen, die Nachrichten gar nicht explizit kennen. Sie sind nicht objekt-orientiert in Kays Sinne. Den Unterschied, der sich daraus ergibt, bespreche ich im Kapitel für C++-Programmierer
Objekte
Jetzt gibt es da aber ein Problem: Wohin mit der 3? Die könnte ja im ersten Eingabefeld (Ausgangswert) oder im zweiten Eingabefeld (Umrechnungsfaktor) gedrückt worden sein. Und was soll mit der 3 geschehen? Sie muss ja irgendwie in den bereits bestehenden Text im Eingabefeld angehängt oder eingefügt werden oder was auch immer.
2. EG_Nachricht
Erhält ein Objekt eine Nachricht, so führt es ein kleines Stück Programm aus
Hier kommt das zweite Konzept zum Tragen: Jede Nachricht hat einen Adressaten. Und diesen Adressaten nennt man Objekt. In unserem Beispiel wäre jedes Eingabefeld ein Objekt, eben ein Eingabefeld-Objekt. Und so ein Objekt zeichnet sich durch zwei Dinge aus: Zum einen kann es aufgrund einer Nachricht ein bisschen Programm ausführen, wie bereits oben angedeutet. Man bezeichnet dieses bisschen Programm als Methode. In unserem Beispiel könnten die beiden Objekte also die Methode tasteGedrückt: ausführen. Dort wäre dann ein bisschen Programm, welches die Taste entgegen nimmt und in den Text einfügt.
Das Zweite ist, dass ein Objekt Daten speichern kann. Nehmen Sie an, dass im ersten Eingabefeld schon der Wert 7 steht, im zweiten 2,5. Dies bedeutet, dass das erste Eingabefeld-Objekt den Wert 7 gespeichert hat und das zweite den Wert 2,5.
Um dies gleich klarzustellen: Jedes Objekt kann mehrere Werte speichern, nicht nur einen. In unserem Beispiel benötigen wir jedoch lediglich einen. Andere Werte, die zu einem Eingabefeld-Objekt gespeichert sind, sind etwa die Textfarbe (fast immer schwarz), ob ein Rahmen vorhanden ist usw.
Wird jetzt eine Taste im ersten Eingabefeld gedrückt, so erhält dieses erste Eingabefeld-Objekt die Nachricht »tasteGedrückt: 3« und führt daraufhin seine Methode tasteGedrückt: aus. Daraufhin fragt es sich selbst, welcher Wert den bisher gespeichert ist und erkennt 7.
3. EG_Objekt
Jedes Objekt kennt zudem seine Werte
An diese 7 hängt es die 3 an und speichert 73 als neuen Wert.
Drückt der Benutzer demgegenüber die Taste, während der Cursor im zweiten Eingabefeld ist, so erhält das zweite Eingabefeld-Objekt die Nachricht »Taste gedrückt: 3« und führt die Methode tasteGedrückt: aus. Dort sieht die Methode, dass bisher der Wert 2,5 gespeichert ist, hängt eine 3 an und speichert das wieder als Wert 2,53.
Wieso machte das Kay auf diese Weise? Nun, wenn wie früher das Programm die Arbeitsschritte festlegte, konnte es keine Missverständnisse geben: Der erste Wert, der vom Benutzer eingegeben wurde, war der Ausgangswert. Der zweit Wert der eingegeben wurde, der Umrechnungsfaktor. Die Zuordnung der Benutzereingabe zu den Speicherstellen des Programmes war also fest. Jetzt jedoch ging das ja alles durcheinander. Und daher musste eine Zuordnung der Nachricht und des Speichers erfolgen.
Also, zusammengefasst: Ein Objekt ist eine Einheit, die Daten speichern kann und aufgrund einer Nachricht eine Operation (Methode) ausführt.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Für die Ihnen angezeigten Verarbeitungszwecke können Cookies, Geräte-Kennungen oder andere Informationen auf Ihrem Gerät gespeichert oder abgerufen werden.
Anzeigen und Inhalte können basierend auf einem Profil personalisiert werden. Es können mehr Daten hinzugefügt werden, um Anzeigen und Inhalte besser zu personalisieren. Die Performance von Anzeigen und Inhalten kann gemessen werden. Erkenntnisse über Zielgruppen, die die Anzeigen und Inhalte betrachtet haben, können abgeleitet werden. Daten können verwendet werden, um Benutzerfreundlichkeit, Systeme und Software aufzubauen oder zu verbessern.
Durch das Klicken des Buttons "Zustimmen" willigen Sie gem. Art. 49 Abs. 1 DSGVO ein, dass auch Anbieter in den USA Ihre Daten verarbeiten. In diesem Fall ist es möglich, dass die übermittelten Daten durch lokale Behörden verarbeitet werden.