• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Grundverständnis Objective-C 2.0

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
Moin allerseits ;)

Ich habe mich in dieses Forum angemeldet um ev. mein Problem lösen zu können.
Ich habe ein wenig Erfahrung mit der Sprache C.

Also:
- Variablen initialisieren
- Arrays
- Funktionen erstellen/aufrufen
- Schleifen etc.

stellen alles kein Problem dar in C.


Nun besitze ich ein MacBook Pro seit 3 Wochen. Ich habe es explizit nur für die Programmierung (hauptsächlich iOS) angeschafft. Also mit dem Ziel lauffähige Programme zu kreieren!

Ich habe mir zwei video2Brain angeschafft mit dem Thema Iphone App Entwicklung und danach allg. Objective C.
Gut, bis dahin kapierte ich nichts!
Ich dachte mir, dass ich Objective-C von Grund auf lernen sollte. Also die iOS App nach vorne verschoben und ein Buch gekauft:

"Objective-C 2.0 - Programmierung von Mac OS X und iPhone" von Sebastian Meyer und Torben Wichers
ISBN: 978-3-8266-9132-4
Dieses Buch hat gute Rezessionen!

Ich lese schon das vierte Mal das erste Kapitel in diesen 3 Tagen. Es handelt von Objekten und Klassen und deren Erzeugung.

Ich verstehe das System einfach nicht zwischen "interface:" und "@implementation" und deren Methoden
Mit nicht verstehen meine ich dass ich überhaupt nicht durchkomme in Objective-C.
Wieso ein - oder ein + bei der Methoden benötigt wird. Wieso 3x die gleiche Variablenname in der .h und in .m einer Klasse auftaucht.
Ich könnte keine 2 Variablen definieren mit unterschiedlichen Zahlenwerten und diese in der "main.m" mit einer "if-Abfrage" vergleichen
Mit fehlt irgendwo das Grundverständnis dieser Programmiersprache.

Was kann ich tun?
Ein anderes Buch kaufen? Dieses von mir gekaufte Buch hatte gute Bewertungen. Einiger Käufer lobten es, weil es von Grund auf alles erklärt. Auch mir scheint es, dass es von Anfang an aufbaut.
Auf Englisches Material kann ich nicht zugreifen. Bin der Sprache nicht Herr.
:-c :-c :-c :-c :-c :-c

mit freundlichen Grüssen und schönen Abend
 

ImpCaligula

deaktivierter Benutzer
Registriert
05.04.10
Beiträge
13.859
Ich habe ein wenig Erfahrung mit der Sprache C.

Auf Englisches Material kann ich nicht zugreifen. Bin der Sprache nicht Herr.

Hmmm... das kann jetzt verschiedene Gründe haben - schwer zu sagen, da ich Dich ja nicht kenne persönlich - und so auch schlecht einschätzen kann...

a) Kann sein Du bist kein 100%-iger Autodidakt... und es fällt Dir schwer dadurch...
b) ObjectiveC ist eben kein HTML oder VBA (ohne das jetzt zu abwertend zu meinen), aber das lernt man eben nicht mal so...
c) Englisch wäre aber von extremen Vorteil, beim Suchen und Nachschlagen...
d) Mir scheint, es fehlt an einer grundsätzlichen soliden (!) Basis was Hochsprachen angeht...
... usw.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Also:
- Variablen initialisieren
- Arrays
- Funktionen erstellen/aufrufen
- Schleifen etc.

stellen alles kein Problem dar in C.

Das ist gut!

Ich habe mir [X] angeschafft
Gut, bis dahin kapierte ich nichts!
[…]
Ich lese schon das vierte Mal das erste Kapitel in diesen 3 Tagen. Es handelt von Objekten und Klassen und deren Erzeugung.
Ich verstehe das System einfach nicht

Ich weiss nicht, wie alt Du bist, aber das halte ich zunächst einmal für vollkommen normal. Ich habe mit, weiss nicht, 12 angefangen und wollte direkt 6502 Assmbler lernen. Das Buch habe ich auch nach zwei Kapiteln erstmal für ein Jahr in die Ecke geschmissen, und mich mit etwas anderem Beschäftigt. EDIT: Dann habe ich das Buch wieder aus der Ecke geholt, und verstanden.

Diese Option hast Du auch! Offensichtlich kannst Du C. Wie schon gesagt, das ist gut. Was Du ganz offensichtlich noch lernen musst, ist objektorientierte Programmierung.

Dass kannst Du auch, zum Beispiel, mit Java, wenn das einfacher für Dich ist. Das tolle ist, Java Bücher in einer älteren Auflage gibt's bei Buchhandlungen für €5 auf dem Ramschtisch, aber auch die älteste Auflage sollte — wenn sie didaktisch gut ist — immer noch für Dich passen. Da hat sich jetzt nicht so rasend viel getan (auf das es für Dich ankommt). Vielleicht versuchst Du es mal?
Ganz viele Autoren von Objective-C Büchern setzen objektorientierte Programmierung voraus. Und bis vor ganz kurzer Zeit war das auch OK, es hat kaum jemand mit Objective-C angefangen: Die meisten kannten schon Java oder C++, da musste man ihnen nur den Unterschied erklären.

Alternative:

zwischen "interface:" und "@implementation"
In @interface deklarierst Du, was Dein Objekt können soll. Das ist das öffentliche, tja, Interface, quasi die Gebrauchsanleitung für andere Objekte. In "Implementation" baust Du es dann tatsächlich.

Wieso ein - oder ein + bei der Methoden benötigt wird.
Das finde ich für den Anfang auch gar nicht sooo wichtig. + kennzeichnet eine KLASSENMETHODE, - eine INSTANZMETHODE.

EDIT: Die meisten Methoden, die Du schreibst, werden Instanzmethoden sein.

Eine Instanzmethode kannst Du nur aufrufen, wenn Du eine Instanz, ein Object dieser Klasse hast: Das kannst Du mit FooClass *foo = [[FooClass alloc] init] oder anders machen. Dann rufst Du die Methode auf: [foo instanzMethode].
+ ist eine Klassenmethode, und wenn Du meinen Text sehr aufmerksam gelesen hast, dann hast Du gerade eine gesehen: alloc. Wenn wir den Code oben auseinandernehmen, sieht er so aus:
Code:
FooClass *foo = [FooClass alloc];
[foo init];
init ist also eine Instanzmethod, sie wird auf foo, einer Instanz der Klasse FooClass aufgerufen. alloc ist eine Klassenmethode. Sie wird nicht auf einer Instanz, sondern auf der Klasse FooClass selbst aufgerufen.
Klarer?

Wieso 3x die gleiche Variablenname in der .h und in .m einer Klasse auftaucht.
Hahaha, das versteht keiner!

Mal im Ernst: In der neuesten Version von Xcode wird:
Code:
@interface foobar {
    id bar;
}
@property (nonatomic, retain) id bar;
@end

@implementation
@syntesize bar;
@end

zu

Code:
@interface foobar
@property (nonatomic, retain) id bar;
@end

Das Du es vorher drei mal schreiben musstest hatte, naja, also weisst Du, Compilerbauer sind auch nur Menschen …

Ich könnte keine 2 Variablen definieren mit unterschiedlichen Zahlenwerten und diese in der "main.m" mit einer "if-Abfrage" vergleichen
Das verstehe ich nicht.

Mit fehlt irgendwo das Grundverständnis dieser Programmiersprache.
Das glaube ich nicht. C kannst Du schon
Alex
 
Zuletzt bearbeitet:

Mr. Nice

Süssreinette (Aargauer Herrenapfel)
Registriert
16.07.09
Beiträge
411
Du hast bei objective c Klassen, die aus einer .h und einer .m Datei bestehen. In der .h (header-Datei) werden Methoden (die Du mit Funktionen aus C vergleichen kannst) "bekannt" gemacht, damit der compiler weiß das diese existieren. In der der .m Datei werden dann die methoden (Funktionen) geschrieben. Du kannst diese Klasse dann immer wieder verwenden, damit Du die Befehle nicht immer neu schreiben musst.


edit:
Ich kann dir dieses Buch hier empfehlen. lass Dich von dem Namen nicht abschrecken;)
http://www.amazon.de/Mac-Programmie...6845/ref=sr_1_1?ie=UTF8&qid=1352466256&sr=8-1
 
  • Like
Reaktionen: FelixMacintosh

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
Danke Danke für eure lehrreichen Antworten! Ich bin 22 und habe eine Technische Lehre hinter mir.

Ich habe mich über verschiedene Online Anleitung hindurch geschlagen.
Nun das Ergebnis ist einleuchtend. Irgendwie fehlt das Grundverständnis von OOP.

Schade, hatte mich extrems gefreut mir ein wenig Objective-C an zu eignen. Leider habe ich überhaupt kein Bock jetzt nach Java oder so zu lernen. Aber wenn ich hier nicht vorwärtskomme bleibt mir nichts anders übrig.
Nur wenn man kein Bock hat, wirds auch nicht einfacher.

Diese Implementierungssache, diese Nachricht verschicken etc. führt bei mir einfach ins Leere. Egal wie lange ich den Quelltext und dessen Beschreibung lese und anschaue.
Und jede Anleitung beschreibt es anders. Bei anderen Programmiertsprachen hat man durch verschiedene Anleitungen von versch. Verfassen immerhin einen roten Faden.
Bei Objective-C fangen die bei der ersten Seite schon mit Fachbegriffen an.

:(
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Nicht aufgeben!

Leider ist es eben gerade bei den Deutschen Objective-C Büchern so, dass sie nicht "von Null" anfangen, aus den o.g. Gründen.

Auf Englisch würde ich Dir Learn Objective-C for Mac and iOS empfehlen, das sollte für Dich mit C-Vorkentnissen ideal sein (Sonst gibt's auch "Learn C" als Vorkurs). Von Scott Knaster habe ich selbst das Programmieren auf dem Mac gelernt. Ach, das ist jetzt über 25 Jahre her …

Schau Dir doch mal den Xcode Null auf Hundert Podcast an, besonders die frühen folgen, wo es um Konzepte und eben Objekte geht.

Und wenn Du spezifische Fragen hast, kannst Du uns ja auch fragen

Alex
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Interessantes Thema und echt super wie geholfen wird!!! Entschuldigung fürs OT...

Bitte. Das hat aber auch immer mit der Qualität der Frage zu tun. Gute Fragen erzeugen bessere Antworten, wie man in diesem Fall schön sehen kann.

Gruss

Alex
 

Scotch

Bittenfelder Apfel
Registriert
02.12.08
Beiträge
8.059
Von Scott Knaster habe ich selbst das Programmieren auf dem Mac gelernt. Ach, das ist jetzt über 25 Jahre her …

Und ich dachte, ich bin ein alter Sack ;) Vor 25 Jahren habe ich mit Intuition und Kupferlisten gekaempft :-D
 

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
:D

Danke nochmals für eure Hilfestellungen.
Letzthin hatte ich das Gefühl, dass mir ein Knopf aufgegangen ist. Habe danach ähnlich wie im Buch "Objective-C 2.0" eine Bank programmiert die nichts anderes tut als Name, Kontonummer und Saldo ausgibt und dass man Geld abheben und rauftun kann.
Wie schon erwähnt ist mir der Knopf ein wenig aufgegangen aber noch nicht 100%.

Schaut euch mal den Code an.

Grüsse deadvil

Anhang anzeigen Bank_deadvil (OC).zip
 

MacAlzenau

Golden Noble
Registriert
26.12.05
Beiträge
22.522
Ich glaube, das passiert oft - erst versteht man absolut nichts, und plötzlich macht es klick, und alles (na ja, zumindest vieles, zumindest das Grundsätzliche) ist klar und man meint, das müsse doch jeder sofort so sehen.
Manchmal hilft's, eine Pause zu machen. Oder von einer ganz anderen Richtung ranzugehen.
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Das sieht doch schon mal gar nicht schlecht aus.

Und als nächsten Schritt mach mal drei Accounts, und schick Geld hin- und her. (Muss jetzt nicht den Transaktionsanforderungen einer Bank entsprechen, soll ja nur eine Übung sein)

Gruss

Alex
 

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
Hallo.

Ich schaffe es nicht mehr weiter. Studiere und probiere schon den Ganzen nachmittag.

Ich möchte von Account1 auf Account2 ueberweisen.

Ich schaffe es den Betrag einzugeben.Ich schaffe es den Betrag von Account1 abzuziehen.
Ich schaffe es aber nicht mit einer "Nachricht" das Geld auf Account2 aufzuaddieren! :(

Jemand Tipps?
Denn mein Kopf räucht schon :)
 

Anhänge

  • Bank2.zip
    21,8 KB · Aufrufe: 76

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Hi,

ich hab leider grad wenig Zeit, aber ich würde sagen, die "Transaktionen" Klasse sparst Du Dir einfach mal.

Denk mal an eine Methode, die Du in der Banking Klasse implementierst:

- (BOOL) überweise:(float)Betrag an:(Banking)anderesKonto

Hint, hint: "self" ist immer das Object, dass die Nachricht Empfangen hat …

Und ganz alternativ lässt Du das erstmal sein, und hebst einfach von account1 etwas ab, und packst es auf account2

Schon eine Idee?

Alex
 

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
Eigentlich nicht so. :)
Das heisst ich sollte mich im Buch ein wenig weiterlesen. Eventuell kommt mir noch ne Idee.
Habe jetzt zwei Methoden, die aber genau wie "DraufTun" und "Abheben" sind. Also nichts neues eigentlich.

Mal Schauen
 

Anhänge

  • Bank3.zip
    21,2 KB · Aufrufe: 74

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Ich geb Dir mal einen Tip … Deine Methode "Überweise" macht ja im Moment nix anderes als Abheben. Das ist ziemlich sinnfrei.

Schreib Sie doch mal um:

Code:
-(BOOL) ueberweise:(float)summe an:(Banking *)anderesKonto;
Das rufst Du dann so auf:
Code:
[account1 ueberweise:50.0 an:account2];

Gruss

Alex
 
  • Like
Reaktionen: ImpCaligula

deadvil

Golden Delicious
Registriert
07.11.12
Beiträge
8
Ich wollte ein Update nach fast zwei Jahren bringen :innocent:

Das ganze Problem war entstanden weil ich die OO-Programmierung nicht richtig kapiert hatte. Das Niveau war mir zu hoch. Ich musste einiges an Fachliteratur lesen. Deshalb fiel mir die ganze Geschichte extrem schwer und verlor das Interesse.
Der Knopf löste sich entgültig, als ich in C++ weiterhin meine Runden drehte und ein komplexes Projekt programmiert habe (Konsolen BlackJack Spiel)
Nachdem das Spiel so lala funktionierte und auf extremen Spaghetti-Code basierte, suchte ich mir auf Youtube einige Einsteiger Videos zu C++ und OOP. Und tada: OOP und der Sinn von Objective-C hatte ich nun verstanden.

In der Schule hatten wir dann JAVA. Gefiel mir zwar nicht 100% aber ich lernte jedenfalls etwas. Bin aber ganz glücklich das ich das Prinzip von Klassen <--> Methoden im Voraus schon theoretisch kapiert hatte.

Bin nun Berufsbedingt in Webtechnologien tätig (Drupal & Co.)
Ich denke ich mach einfach bei Objective-C dort weiter wo ich aufgehört habe. Am Anfang :cool:

Gruss
 

below

Purpurroter Cousinot
Registriert
08.10.06
Beiträge
2.858
Das ist gut! Allerdings muss ich Dir sagen, dass es jetzt wenig sinnvoll ist, mit Objective-C weiterzumachen.

Apple hat jetzt auf swift umgestellt. Noch wird zwar in der Produktion fleissig in Objective-C gecoded, aber mittelfristig ist Objective-C ziemlich tot

Gruss

Alex