Eine gute Objekt-Orientierte Analogie
Ich bin auf der Suche nach einem guten Weg zu beschreiben, OO für Anfänger, aber eine Analogie.
Derzeit bin ich verglich eine Klasse zu einer shopping-Liste, und einem Einkaufswagen voller Gegenstände auf ein Objekt. Aber ich glaube, es ist ein bisschen verwirrend.
Vorzugsweise die Analogie würde sein, spiegelt sich auch im code-Beispiel (Ruby), momentan habe ich diese, und es fühlt sich klunky.
# First we create a class
class Shopping
# The items method gives us a list of items in the Shopping
def items
["apple", "cereal", "flour"]
end
end
# Create a new Shopping, called basket
basket = Shopping.new
# ask the basket what items it has
basket.items #=> ["apple", "cereal", "flour"]
- Erinnert mich an stackoverflow.com/questions/355796/... (aber das ist nicht genau das, was Sie fordern)
- werden vorsichtig, wenn es um eine Klasse oder ein Objekt in ruby. Klassen sind Objekte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe es gesehen, beschrieben, wie der Mensch ist eine Klasse, und Steve ist ein Objekt (Instanz von Mann). Steve hat blondes Haar, ist 6', wiegt 180£, etc.
Können Sie dann tun, erbschaft, so ist der Mensch erbt Person, Person erbt Tier, und weiter.
Human
, das hinzufügen neuer Mitglieder/Funktionen, und die Schaffung von KlasseEvil Cyborg Overlord
, das würde dann erfordern die Schaffung einer anderen sub-KlasseMutant Superhero
etc etc und der rest der Klasse Spiralen aus Steuerung heraus (ich spreche aus Erfahrung hier).Ich glaube nicht, dass Sie sollten denken im Sinne einer Analogie, sondern ein Beispiel erläutern. Menschen denken schon in einer Objekt-orientierten Art und Weise; sagen Sie Ihnen, ein Objekt, eine Sache und eine Klasse ist eine Art von Sache.
Ihnen zeigen, dass
2
ist einFixnum
und"hello"
ist einString
. Dann zeigen Sie ein Beispiel, wie eine Klasse beschreibt, was diese Art der Sache, zusammengesetzt ist und was es kann. Diese einfachen Beispiele, wie Tiere oder Autos, wird funktionieren.Wenn ich normal denke, über den Unterschied zwischen Klasse und Objekt, ich in der Regel dazu neigen zu denken, der die Klasse als bauplan. Vielleicht könnten Sie vergleichen eine Klasse ein bauplan und ein Objekt, um ein Haus?
Ich bin kein Mechaniker, aber ich habe oft benutzen Autos wie ein hohes Maß Beispiel für Polymorphismus und Hierarchie.
Wir haben Fahrzeuge, Dinge, die um uns herum, und es würden Methoden und Eigenschaften wie Move() oder Park() oder PassengerCount. Beispiele von Fahrzeugen-Limousinen, Vans, LKW und Motorräder. Limousine haben könnte, - Methoden und-Eigenschaften wie TurnOnLights(), GallonsOfGas, und solchen, sondern unter der Limousine könnte Polizeiauto. Polizeiauto kann neue Methoden und Parameter neu zu definieren und einige der Limousine Methoden und Eigenschaften, D. H. ein Polizeiauto ist TurnOnLights () - Methode kann viel mehr tun, als eine Limousine machen können.
Soweit Instanzen gehen, können Sie Ihnen erklären, dass Sie Ihr Auto ist eine Instanz der Limousine. Es ist blau, hat 7 Gallonen von gas, und kann wiederum auf die Lichter. Nur zu Fuß über einen Parkplatz und wies Instanzen: "das ist ein van, es ist eine Limousine, hier ist ein Fahrrad." Don ' T behandeln Sie dumm, aber zeigen Sie Ihnen, wie es ist, eine definition und beziehen sich auf eine definition, die Sie bereits kennen. Auf einer seitlichen Anmerkung, darüber reden, wie die Parkplatz ist ein array mit Fahrzeug-Objekte. Der Parkplatz ist nicht egal, welche Art von Fahrzeug es ist.
Gibt es eine Menge verschiedener Möglichkeiten, um sich zu beziehen, von privaten und öffentlichen Methoden, um diese als gut. Wie wenn Sie Ihr Auto hat keine Ahnung, wie viel gas noch ein Auto hat, oder so ähnlich.
Wenn Sie fangen auf, Sie können beschreiben, Schnittstellen zu, indem er sagte: jeder Limousine (lassen Sie es automatisch, um die Dinge zu vereinfachen, für jetzt) hat die gleiche Schnittstelle. Sie alle bieten die gleiche Methode für die Lenkung, Beschleunigung, Bremsen, Anzeige von gas-und Laufleistung und so weiter. Wie diese Funktionen tatsächlich arbeiten, kann sich von Instanz zu Instanz, aber die gleichen Methoden zur Verfügung gestellt werden, in allen Limousinen. Das Laufwerk muss nicht wissen wie der Motor funktioniert, die explizit wegen dieser Schnittstelle.
Finde ich die Auto-Analogie zu gut für einen Einführungs-level-Modell.
Automobile
kann eine base virtuellen Klasse, mit Mitgliedern wie Marke, Modell, ein array vonTire
Objektestart()
unddrive()
als Methoden, etc. Abgeleitete Klassen könnten gehörenTruck
,Compact
usw.Dem ersten Kapitel von "Denken in C++" hat ein gutes Objekt-Modell Einführung:
http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Frames.html
Beim erklären OOP für einen Anfänger finde ich es sinnvoll zu führen, mit der Idee, dass die Welt in der wir Leben, besteht aus Objekten, und die Objekte miteinander interagieren. Ich möchte Fokus auf ein paar wichtige Analogien, die zeigen, was Objekte sind, die verschiedenen Möglichkeiten, Sie können aus und im Zusammenhang, und wie diese Objekte letztlich miteinander interagieren:
Analogie 1: ich würde beschreiben, ein Auto-Motor und die anderen Teile, die es ausmachen, wird dieser auf die Idee, wie die Objekte können verwendet werden, um zu Komponieren anderes Objekt.
Analogie 2: ich würde es beschreiben so etwas wie eine Fußball-Mannschaft und zeigen, dass wir in diesem Fall können Sie Objekte, die nicht aus anderen Objekten, sondern die Interaktion mit anderen Objekten (wie andere Spieler, die Fußball, Feld, etc.). Ich finde, dass dieser hilft, sich auf die Idee, wie die Objekte in der Lage sind, zu interagieren und Einfluss auf ein anderes. Man könnte auch werfen in einige Konzepte Vererbung hier, wenn du magst (zum Beispiel, wie alle Spieler verlängern-football-Spieler oder Sportler oder etwas ähnliches), aber halten Sie im Verstand, den Sie wollen es einfach zu halten.
Lieber benutze ich eine Analogie von Objekten, Menschen, die miteinander kommunizieren, zu erreichen ein Ziel.
In dieser Analogie eine Klasse kann auch mehr wie eine Rolle oder ein job-Beschreibung: Bob (Objekt) ist ein Buchhalter (Klasse).
Dies ist nicht das typische "Ding-centric' Art design für Anfänger, aber ich glaube, es geht ein langer Weg in Richtung helfen, lehren, Konzepte wie Inversion of Control und die richtige Zuordnung von Verantwortlichkeiten.
Wenn Sie das denken über ihn tiefer, Industrialisierung sagt viel über objektorientierte Programmierung. In der Objekt-Orientierten Programmierung eine Klasse ist als eines Mitarbeiters/Person. Eine Methode ist als eine Prozess - /Skill/Info im Besitz der Mitarbeiter/die Person. Ein Paket ist als eine Firma.
Wichtig: denke Immer, wie es auf Ihrem eigenen Industrieunternehmen. Du bist der Manager. Die executive! Sie machen die Person/Mitarbeiter/- Klasse Arbeit! Dann, wenn Sie wirklich gut sind diese:
Können Sie andere Mitarbeiter/Person/Klasse von anderen Unternehmen/Paket. (Mieten Sie! Piraten Ihnen!)
Wenn der Mitarbeiter/die Person/Klasse hat keine Fähigkeiten/Prozess - /Info/- Methoden, es zu tun, löschen Sie Sie. (Feuer Sie!)
Wenn das Unternehmen/Paket, das Sie gebaut ist, wächst. Hinzufügen Mitarbeiter/Person/Klasse. Dann wollen Sie zum hinzufügen von Fähigkeiten/Prozess - /Info/- Methoden, es zu tun, Sie Programm in, wie Sie wollen, es zu tun. (Mieten Sie! Sie trainieren!)
Wenn Sie nicht wie die Firma/Paket, mit der Sie arbeiten, finden andere Unternehmen/Paket, dass hat große Fähigkeiten/Prozess - /Info/- Methoden. (Zeichen aus anderen Verträgen mit anderen Unternehmen.)
Wenn Sie nicht wie die Person/der Mitarbeiter/- Klasse, finden andere Person/Mitarbeiter/- Klasse, die hat bessere Fähigkeiten/Prozess - /Info/- Methoden. (Mieten jemand anderes zu tun den job.)
Wenn Ihr die Person/Mitarbeiter/- Klasse ist ein guter Verkäufer, und er wird gefördert, er wird die Person/der Mitarbeiter/Class Sales Manager, und er bekommt mehr Fähigkeiten/Prozess - /Info/- Methoden, aber immer noch verkauft. (Ihm mehr Aufgabe!)
Nur nicht zu unhöflich zu Ihrem Menschen, sonst werden Sie rebellieren. (Ist dies natürlich nicht passieren.)
Lesen Sie mehr...