Różnica między obiektem a instancją

83

Wiem, że tego rodzaju pytania został poproszony wcześniej , ale nadal czuję, że odpowiedź jest zbyt niejasny dla mnie (i co za tym idzie, niektóre / większość początkujących) do uchwycenia.

Próbowałem nauczyć się szerszych koncepcji programowania niż proceduralne i podstawowe OOP. Rozumiem konkretne koncepcje OOP (tworzysz klasę, która ma dane (składowe) i funkcje (metody), a następnie tworzysz instancję tej klasy w czasie wykonywania, aby faktycznie robić rzeczy, tego rodzaju rzeczy).

Myślę, że mam pojęcie o tym, czym jest klasa ( rodzaj projektu projektu instancji, która ma być utworzona na jej podobieństwo w czasie kompilacji ). Ale jeśli tak jest, czym jest obiekt? Wiem również, że w językach opartych na prototypach może to jeszcze bardziej zepsuć sytuację, ale być może dlatego w moim umyśle musi istnieć wyraźne rozróżnienie między obiektem a instancją.

Poza tym zmagam się z pojęciami „obiektu” i „instancji”. Wiele zasobów, które czytałem (w tym odpowiedzi w SO), mówi, że są one w dużej mierze takie same i że różnica polega na semantyce. Inni ludzie mówią, że istnieje między nimi prawdziwa różnica pojęciowa.

Czy eksperci w SO mogą pomóc początkującym mieć ten moment „aha”, aby przejść do przodu w świecie OOP?

Uwaga: to nie jest praca domowa, nie chodzę do szkoły - jednak myślę, że pomogłoby to osobom, które szukają pomocy w odrabianiu lekcji.

TCCV
źródło
1
Zastanawiam się, czy chciałbyś dodać dodatkowe pytania, takie jak „czy wszystkie instancje są obiektami?” i „czy wszystkie instancje obiektów?” Jeśli oba „tak”, wówczas możemy potwierdzić, że są takie same.
WesternGun
Gdy utworzysz instancję klasy (używając new), ta utworzona rzecz staje się obiektem. Obiekt to coś, co może być zgodne z hermetyzacją, polimorfizmem, zasadami abstrakcji programowania zorientowanego obiektowo oraz rzeczywistą rzeczą, z którą program oddziałuje, aby wykorzystać elementy instancji zdefiniowane w klasie. Obiekt zawiera elementy instancji (elementy niestatyczne). Zatem instancja klasy jest obiektem. Słowo
``

Odpowiedzi:

131

Plan projektu domu jest jak opis klasy. Wszystkie domy zbudowane z tego projektu są obiektami tej klasy. Przykładem jest dany dom.

joe snyder
źródło
6
Jest też ulica z mojego rodzinnego miasta, która ma odrobinę lokalnej sławy, ponieważ w rzędzie jest 8 identycznie zbudowanych murowanych domów (zanim powstała koncepcja „zabudowy mieszkaniowej”). Więc mogę to bardzo ładnie wyobrazić. „Klasa” jest tym, co nakreślił architekt. Gotowe domy są „obiektami”, ponieważ wszystkie są identycznie zbudowane. Każdy dom jest „instancją”, ponieważ od tamtej pory są (i nadal mogą być) traktowane inaczej [teraz jest bocznica: o (].
TCCV
16
A metody statyczne są jak narzędzia wspólne dla wszystkich domów.
WOPR,
2
Ale czy dom zbudowany na podstawie planu nie jest instancją?
Hot Licks
1
Oznacza to, że pierwsze wspomnienia zajmowane przez definicję klasy to instancja. podczas gdy wszystkie utworzone obiekty nazywane są obiektami.
Hafiz Shehbaz Ali
6
Czy obiekt i instancja nie są dokładnie takie same?
Praveen Kumar
42

Prawda jest taka, że ​​programowanie obiektowe często powoduje zamieszanie, tworząc rozdźwięk między filozoficzną stroną rozwoju a faktycznymi mechanicznymi działaniami komputera. Spróbuję zestawić te dwa dla Ciebie:

Podstawowa koncepcja OOP jest następująca: Klasa >> Obiekt >> Instancja.

Klasa = niebieski nadruk. Obiekt jest rzeczywistą rzeczą zbudowaną w oparciu o „niebieski druk” (jak dom). Instancja to wirtualna kopia (ale nie rzeczywista kopia) obiektu.

Bardziej technicznym wyjaśnieniem „instancji” jest to, że jest to „odniesienie do pamięci” lub zmienna odniesienia. Oznacza to, że „instancja” jest zmienną w pamięci tylkoma adres pamięci obiektu w nim. Obiekt, do którego się odnosi, jest tym samym obiektem, o którym mówi się, że instancja jest „instancją”. Jeśli masz wiele instancji obiektu, tak naprawdę masz po prostu wiele zmiennych w różnych miejscach w pamięci, z których wszystkie mają ten sam dokładny adres pamięci - wszystkie są adresami tego samego dokładnego obiektu. Nie możesz nigdy „zmienić” instancji, chociaż wygląda na to, że możesz to zrobić w swoim kodzie. To, co naprawdę robisz, gdy „zmieniasz” instancję, to bezpośrednia zmiana oryginalnego obiektu. Elektronicznie, procesor przechodzi przez jedno dodatkowe miejsce w pamięci (zmienna / instancja odniesienia), zanim zmieni dane oryginalnego obiektu.

Proces jest następujący: procesor >> lokalizacja w pamięci instancji >> lokalizacja w pamięci oryginalnego obiektu.

Pamiętaj, że nie ma znaczenia, której instancji używasz - wynik końcowy zawsze będzie taki sam. WSZYSTKIE instancje będą nadal przechowywać te same dokładne informacje w swoich lokalizacjach pamięci - adres pamięci obiektu - i tylko obiekt się zmieni.

Związek między klasą a przedmiotem jest nieco bardziej zagmatwany, choć filozoficznie jest najłatwiejszy do zrozumienia (blue print >> house). Jeśli obiekt to rzeczywiste dane przechowywane gdzieś w pamięci, czym jest „klasa”? Okazuje się, że mechanicznie obiekt jest dokładną kopią klasy. Tak więc klasa jest po prostu kolejną zmienną w innym miejscu w pamięci, która zawiera dokładnie te same informacje, co obiekt. Zwróć uwagę na różnicę między relacjami:

Obiekt jest kopią klasy. Instancja to zmienna przechowująca adres pamięci obiektu.

Możesz również mieć wiele obiektów tej samej klasy, a następnie wiele wystąpień każdego z tych obiektów. W takich przypadkach zestaw wystąpień każdego obiektu ma taką samą wartość, ale wystąpienia między obiektami nie. Na przykład:

Niech klasa A z klasy A niech Object1, Object2 i Object3.

// Object1 ma dokładnie taką samą wartość jak object2 i object3, ale znajdują się w różnych miejscach w pamięci.

from Object1 >> let obj1_Instance1, obj1_Instace2, obj1_Instance3

// wszystkie te instancje są również równoważne pod względem wartości i znajdują się w różnych miejscach w pamięci. Ich wartości = Object1.MemoryAddress.

itp.

Kiedy zaczynasz wprowadzać typy, sprawy stają się bardziej skomplikowane. Oto przykład przy użyciu typów z języka C #:

// załóżmy, że klasa Person istnieje Person john = new Person ();

Właściwie ten kod jest łatwiejszy do przeanalizowania, jeśli podzielisz go na dwie części:

Person john;
john = new Person();

Mówiąc językiem technicznym, pierwsza linia „deklaruje zmienną typuOsoba. Ale co to znaczy ?? Ogólne wyjaśnienie jest takie, że mam teraz pustą zmienną, która może zawierać tylko obiekt Person. Ale chwileczkę - to pusta zmienna! Nie ma nic w tej lokalizacji pamięci zmiennych. Okazuje się, że „typy” nie mają znaczenia mechanicznego. Typy zostały pierwotnie wymyślone jako sposób zarządzania danymi i nic więcej. Nawet jeśli deklarujesz typy pierwotne, takie jak int, str, chr (bez inicjalizacji), na komputerze nic się nie dzieje. Ten dziwny, składniowy aspekt programowania jest częścią tego, skąd ludzie myślą, że klasy są planem obiektów. OOP są jeszcze bardziej mylące z typami z typami delegatów, programami obsługi zdarzeń itp. Starałbym się nie skupiać na nich zbytnio i po prostu pamiętać, że wszystkie są mylące.

Druga linia również jest nieco zagmatwana, ponieważ robi dwie rzeczy naraz:

Pierwsza z prawej strony „nowa osoba ()” jest oceniana. Tworzy nową kopię klasy Person - to znaczy tworzy nowy obiekt.

Następnie sprawdzana jest lewa strona „john =”. Zamienia john w zmienną referencyjną, podając adres pamięci obiektu, który właśnie został utworzony po prawej stronie tego samego wiersza.

Jeśli chcesz zostać dobrym programistą, ważne jest, aby zrozumieć, że żadne środowisko komputerowe nigdy nie działa w oparciu o ideały filozoficzne. Komputery nie są nawet tak logiczne - to po prostu duży zbiór przewodów sklejonych ze sobą za pomocą podstawowych obwodów logicznych (głównie NAND i OR).

Rambly John
źródło
32

Słowo Class pochodzi z Klasyfikacji ( A kategoria , do której coś się położyć ), teraz mamy wszystko słyszał, że klasa jest jak plan, ale co to dokładnie oznacza? Oznacza to, że klasa zawiera opis konkretnej kategorii ( chciałbym pokazać różnicę między klasą, obiektem i instancją na przykładzie z użyciem języka Java i poprosiłbym czytelników o wizualizację jej jako historii podczas czytania, a jeśli nie są zaznajomieni z java nie ma znaczenia ) Zacznijmy od stworzenia Kategorii o nazwie HumanBeing , więc program Java będzie to wyrażał w następujący sposób

class HumanBeing{ 
   /*We will slowly build this category*/ 
}

Teraz, jakie atrybuty ma człowiek , ogólnie rzecz biorąc, imię , wiek , wzrost , waga ograniczmy się teraz do tych czterech atrybutów, dodajmy to do naszej kategorii

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight; 

   /*We still need to add methods*/

}

Teraz każda kategoria ma zachowanie, na przykład kategoria Pies zachowuje się szczekać, aportować, przewracać itp., Podobnie nasza kategoria HumanBeing może również zachowywać się w określony sposób, na przykład gdy pytamy naszego HumanBeing o Twoje imię / wiek / wagę / wysokość? Powinien podać nam swoje imię / wiek / wagę / wzrost, więc w Javie robimy to w następujący sposób

class HumanBeing{
    private String Name;
    private int Age;
    private float Height;
    private float Weight;  

    public HumanBeing(String Name,int Age,float Height,float Weight){
       this.Name = Name;
       this.Age  = Age;
       this.Height = Height;
       this.Weight = Weight;
    }

    public String getName(){
      return this.Name;
    }

    public int getAge(){
      return this.age;
    }

    public float getHeight(){
      return this.Height;
    }

    public float getWeight(){
      return this.Weight;
    }
}

Teraz dodaliśmy zachowanie do naszej kategorii HumanBeing , więc możemy zapytać o jego imię, wiek, wzrost, wagę, ale od kogo zapytasz o te szczegóły, ponieważ class HumanBeingjest to tylko kategoria, jest to plan, na przykład architekt sporządza plan papier budynku, który chce zbudować, teraz nie możemy żyć dalej w planie ( jego opisie budynku ) możemy mieszkać w budynku tylko po jego zbudowaniu Więc tutaj musimy uczynić człowieka z naszej kategorii, którą opisane powyżej, więc jak to zrobimy w Javie

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);    
  }
}

Teraz w powyższym przykładzie stworzyliśmy naszego pierwszego człowieka o imieniu wiek wzrost waga, więc co dokładnie dzieje się w powyższym kodzie? . Tworzymy instancję kategorii HumanBeing, czyli powstaje obiekt naszej klasy

Uwaga: Obiekt i instancja nie są synonimami W niektórych przypadkach wydaje się, że obiekt i instancja są synonimami, ale tak nie jest, podam oba przypadki

Przypadek 1: Obiekt i instancja wydają się być synonimami
Pozwólcie mi trochę rozwinąć, kiedy mówimy, że HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90); obiekt naszej kategorii jest tworzony w pamięci sterty i jest do niego przydzielany jakiś adres i firstHumanzawiera odniesienie do tego adresu, teraz ten obiekt jest Przedmiot człowieczeństwa, a także instancja człowieczeństwa . Tutaj wydaje się, że obiekty i instancja są synonimami, powtórzę, że nie są synonimami

Wznówmy naszą historię, stworzyliśmy naszego pierwszego Człowieka, teraz możemy zapytać o jego imię, wiek, wzrost, wagę, tak to robimy w Javie

class Birth{
  public static void main(String [] args){
    HumanBeing firstHuman = new HumanBeing("Adam",25,6.2,90);
    System.out.println(firstHuman.getName());
    System.out.println(firstHuman.getAge());
    ...
    ...  
  }
}

więc mamy pierwszego człowieka i przesuńmy pióro, nadając naszemu pierwszemu człowiekowi jakąś kwalifikację, zróbmy go Doktorem, więc potrzebujemy kategorii o nazwie Doktor i dajmy naszemu Doktorowi pewne zachowanie, więc w Javie postępujemy w następujący sposób

class Doctor extends HumanBeing{
   public Doctor(String Name,int Age,float Height,float Weight){
      super(Name,Age,Height,Weight);
   }
   public void doOperation(){
    /* Do some Operation*/ 
   }

   public void doConsultation(){
    /* Do so Consultation*/
   }
}  

Tutaj użyliśmy koncepcji dziedziczenia, która wprowadza w kodzie pewną możliwość ponownego wykorzystania, każdy lekarz zawsze będzie człowiekiem, będąc pierwszym, więc lekarz będzie miał Imię, wiek, wagę, wzrost, które zostaną odziedziczone po Człowieku, zamiast pisać je ponownie, zwróć uwagę, że właśnie napisaliśmy opis lekarza, którego jeszcze nie stworzyliśmy, więc stwórzmy Doktora w naszymclass Birth

class Birth{
  public static void main(String [] args){
    Doctor firstDoctor = new Doctor("Strange",40,6,80);
    .......
    .......
    /*Assume some method calls , use of behaviour*/
    .......
    .......    
  }
}

Przypadek 2: Obiekt i instancja nie są synonimami
W powyższym kodzie możemy wyobrazić sobie, że tworzymy instancję naszej kategorii Doktor i ożywamy ją tj. Po prostu tworzymy obiekt kategorii Doktor , Jak już wiemy Obiekty są tworzone w pamięci sterty i firstDoctorzawiera odniesienie do tego obiektu na stercie;

Ten konkretny obiekt firstDoctorjest następujący (należy pamiętać, że firstDoctorzawiera odniesienie do obiektu, nie jest to sam obiekt)

  1. firstDoctorjest przedmiotemclass Doctor i instancją Aclass Doctor
  2. firstDoctorto nie przedmiotclass HumanBeing Ale instancjiclass HumanBeing

Zatem określony Object może być instancją określonej klasy, ale nie musi być obiektem tej danej klasy

Wniosek:

O obiekcie mówi się, że jest Instancją określonej kategorii, jeśli spełnia wszystkie cechy tej konkretnej kategorii

Przykład z prawdziwego świata będzie następujący: po raz pierwszy rodzimy się jako ludzie, więc wyobraź sobie nas jako obiekt człowieka, teraz, gdy dorastamy, podejmujemy obowiązki i uczymy się nowych umiejętności oraz odgrywamy różne role w życiu. Przykład Syn, brat, córka, ojciec Matko teraz Czym właściwie jesteśmy? Możemy powiedzieć, że jesteśmy obiektami człowieka, ale przykładami brata, córki, ... itd.

mam nadzieję, że to pomoże

Dziękuję Ci

Pushkarraj Pujari
źródło
5
... i dlaczego mamy tylko 3 głosy za tą odpowiedzią?
Pratik Ambani
13

wprowadź opis obrazu tutaj

Obiekty to rzeczy w pamięci, podczas gdy instancje to rzeczy, które się do nich odnoszą. Na powyższym zdjęciu:

  • std (instancja) -> Obiekt ucznia (po prawej)
  • std1 (instancja) -> Obiekt ucznia (po lewej)
  • std2 (instancja) -> Obiekt ucznia (po lewej)
  • std3 (instancja) -> brak obiektu (null)
Truong Ha
źródło
4
To wspaniale. Bardzo podoba mi się to, że jest na niskim poziomie. Zastanawiam się, czy podoba mi się to bardziej niż analogia. Myślę, że znajomość dwóch razem jest tym, czego naprawdę potrzebowałem. głosuj za, ale nie jestem pewien, czy mogę udzielić ci odpowiedzi, ponieważ została ona już przekazana Joe. Ale dziękuję. To dużo wyjaśnia.
TCCV,
Cóż, więc instancja jest wskaźnikiem do obiektu? (instancja == zmienna z adresem pamięci?)
Stano
6
Truong, twoja odpowiedź jest błędna i myląca. W rzeczywistości instancja jest obiektem wyprowadzonym z obiektu klasy bazowej. Instancja == obiekt. Ta terminologia jest dobrze wyjaśniona na przykład w tej lub innej odpowiedzi.
Stano
@jww: Obraz jest linkiem do math.hws.edu/javanotes/c5/objectsInHeap.png, który obecnie wynosi 404. Przypuszczalnie był widoczny w momencie, gdy został opublikowany.
Matt Burland,
6

Obiekt jest instancją klasy (dla języków opartych na klasach).

Myślę, że to najprostsze wyjaśnienie, jakie mogę wymyślić.

sukru
źródło
1
Zgadzam się, że twoje wyjaśnienie jest zgodne ze sposobem, w jaki czytałem, ale jest wiele wpisów w Internecie, które rozróżniają między nimi. Nie wiem, czy na tego rodzaju pytanie nie można odpowiedzieć bez znajomości języka (wow, meta-pytanie, to pytanie jest klasą, której nie można użyć bez utworzenia jej wystąpienia w języku, lol).
TCCV,
6

Klasa definiuje obiekt. W wielu językach można pójść jeszcze dalej i powiedzieć, że interfejs definiuje wspólne atrybuty i metody między obiektami.

Obiekt to coś, co może reprezentować coś w prawdziwym świecie. Jeśli chcesz, aby obiekt faktycznie reprezentował coś w prawdziwym świecie, musisz utworzyć instancję obiektu. Tworzenie instancji oznacza, że ​​musisz zdefiniować cechy (atrybuty) tego konkretnego obiektu, zwykle za pomocą konstruktora.

Po zdefiniowaniu tych cech masz teraz instancję obiektu.

Mam nadzieję, że to wszystko wyjaśnia.

Derek Litz
źródło
Myślę, że w zasadzie mówi to o tym, co powiedział Joe. Popraw mnie, jeśli się mylę.
TCCV
3
Powyżej Joe mówi, że wszystkie domy zbudowane na podstawie planu są obiektami. Prawdziwe. I mówi, że dany dom to przykład. Prawdziwe. Ale wszystkie domy są instancjami, a dany dom jest również obiektem. Robił różnicę tam, gdzie jej nie było. W kodzie konieczne jest rozróżnienie między obiektem a instancją w momencie, gdy go konstruujemy. Mówimy, że jest tworzony, gdy został faktycznie zbudowany. Typowe pytanie może brzmieć: czy pamiętasz o utworzeniu instancji obiektu? to znaczy. jeśli zapomniałeś wywołać konstruktora po zadeklarowaniu obiektu.
Derek Litz
1
ah, to dobre rozróżnienie. Inaczej mówiąc, instancja to obiekt, który został skonstruowany (tj. Został wywołany przez konstruktora).
TCCV,
3

„Klasa opisuje zbiór obiektów zwanych jej instancjami”. - The Xerox learning Research Group, „The Smalltalk-80 System”, Byte Magazine Tom 06 Numer 08, str. 39, 1981.

miguel.negrao
źródło
2

Co to jest przedmiot?

Obiekt jest instancją klasy. Obiekt można najlepiej zrozumieć, znajdując przykłady z prawdziwego świata wokół siebie. Twoje biurko, laptop, Twój samochód są dobrymi przykładami przedmiotów w świecie rzeczywistym.

Rzeczywiste obiekty mają dwie cechy, wszystkie mają stan i zachowanie. Ludzie są również dobrym przykładem obiektu. My, ludzie, mamy stan / atrybuty - imię, wzrost, wagę i zachowanie - chodzić, biegać, rozmawiać, spać, kod: P.

Co to jest klasa?

Klasa to plan lub szablon opisujący szczegóły obiektu. Te szczegóły to mianowicie

nazwy atrybutów / operacji na stanach / metod

class Car 
{
    int speed = 0;
    int gear = 1;

    void changeGear(int newGear)
    {
        gear = newGear;
    }

    void speedUp(int increment) 
    {
        speed = speed + increment;
    }

    void applyBrakes(int decrement) 
    {
        speed = speed - decrement;
    }
}

Rozważ powyższy przykład, pól speedi gearbędzie reprezentować stan obiektu i metody changeGear, speedUpiapplyBrakes określają zachowanie obiektu Car ze światem zewnętrznym.

Bibliografia:

Yasser Shaikh
źródło
1

Myślę, że ważne jest, aby podkreślić, że zasadniczo są dwie rzeczy. Plan i kopie. Ludzie mają tendencję do nazywania tych różnych rzeczy; klasy, obiekty, instancje to tylko niektóre z nazw, których używają dla nich ludzie. Ważne jest to, że istnieje plan i jego kopie - niezależnie od ich nazw. Jeśli już rozumiesz te dwie kwestie, po prostu unikaj innych rzeczy, które Cię mylą.

Szymon
źródło
0

Porównajmy jabłka z jabłkami. Wszyscy wiemy, czym jest jabłko. Jak to wygląda. Jak to smakuje. To jest klasa. To jest definicja rzeczy. To jest to, co o czymś wiemy.

Teraz idź i znajdź jabłko. To jest przykład. Widzimy to. Możemy tego spróbować. Możemy z tym coś zrobić. To jest to, co mamy.

Klasa = co o czymś wiemy. Definicja.

Obiekt / Instancja = Coś, co pasuje do tej definicji, którą mamy i możemy z nią robić.

Jacek
źródło
0

W niektórych przypadkach termin „obiekt” może być używany do opisu instancji, ale w innych jest używany do opisania odniesienia do instancji. Termin „instancja” odnosi się tylko do rzeczywistej instancji.

Na przykład Listę można opisać jako zbiór obiektów, ale w rzeczywistości zawiera odwołania do instancji obiektów.

supercat
źródło
Czyli w tym przypadku odniesienie to po prostu element zastępczy zawierający link do instancji? Gdzie link może być czymś w rodzaju adresu pamięci?
TCCV
0

Zawsze podobał mi się pomysł, który równa się definicji klasy jako „abstrakcyjnego typu danych” . To znaczy, kiedy definiujesz klasę, definiujesz nowy typ „czegoś”, jego reprezentację typu danych w kategoriach prymitywów i innych „rzeczy” oraz jego zachowanie w kategoriach funkcji i / lub metod. (Przepraszam za ogólnikowość i formalizm)

Za każdym razem, gdy definiujesz klasę, otwierasz nową możliwość definiowania pewnych obiektów wraz z ich właściwościami i zachowaniem, kiedy tworzysz instancję i / lub tworzysz z niej określony obiekt, faktycznie materializujesz tę możliwość.

Czasami terminy obiekt i instancje są wymienne. Niektórzy puryści OOP utrzymają, że wszystko jest obiektem, nie będę narzekać, ale w prawdziwym świecie OOP my, programiści, używamy dwóch koncepcji:

  1. Klasa: przykład abstrakcyjnego typu danych, z którego można wyprowadzić inne ADT i tworzyć obiekty.
  2. Obiekty: zwane także instancjami, reprezentują konkretne przykłady struktur danych i funkcji reprezentowanych przez dany abstrakcyjny typ danych.
Jose Diaz
źródło
0

Programowanie obiektowe to metafora systemowa która pomaga organizować wiedzę, którą program musi obsługiwać, w sposób ułatwiający tworzenie programu. Decydując się na programowanie za pomocą OOP, odbierasz swoje OOP-Googles i decydujesz, że zobaczysz problem prawdziwego świata, gdy wiele obiektów współpracuje między sobą, wysyłając wiadomości. Zamiast widzieć faceta prowadzącego samochód, widzisz faceta wysyłającego wiadomość do samochodu, wskazującą, co ma zrobić samochód. Samochód jest dużym obiektem i odpowie na tę wiadomość, wysyłając wiadomość do swojego silnika lub koła, aby móc poprawnie zareagować na to, co Kierowca nakazał mu w komunikacie itp.

Po utworzeniu metafory systemu i postrzeganiu całej rzeczywistości jako obiektów wysyłających wiadomości, decydujesz się umieścić wszystkie rzeczy, które widzisz, a które są istotne dla domeny problemowej, w komputerze. Zauważysz tam, że jest wielu Facetów kierujących różnymi kartami i bezsensowne jest programowanie zachowania każdego z nich osobno, ponieważ wszyscy zachowują się w ten sam sposób ... Więc możesz powiedzieć dwie rzeczy:

  • Wszyscy ci faceci zachowują się w ten sam sposób, więc utworzę klasę o nazwie Driver, która określi, kto zachowuje się wszyscy Kierowcy na świecie, ponieważ wszyscy zachowują się w ten sam sposób. (I używasz klasowego OOP)
  • Albo możesz powiedzieć Hej! Drugi Kierowca zachowuje się tak samo jak pierwszy Kierowca, z tym że lubi jechać trochę szybciej. Trzeci Kierowca zachowuje się tak samo jak pierwszy Kierowca, z wyjątkiem tego, że lubi jeździć zygzakiem podczas jazdy. (I używasz OOP opartego na prototypach).

Następnie zaczynasz wprowadzać do komputera informacje o tym, jak zachowują się wszystkie Sterowniki (lub jak zachowuje się pierwszy sterownik oraz jak drugi i trzeci różnią się od tego), a po chwili masz swój program i używasz kodu do utwórz trzy sterowniki, które są modelem, którego używasz na tym komputerze, aby odnieść się do sterowników, które widziałeś w prawdziwym świecie. Te 3 sterowniki, które utworzyłeś w komputerze, to instancje prototypu (w rzeczywistości pierwszy z nich to prototyp, pierwszy może być sam prototypem, w zależności od tego, jak modelujesz) lub klasę, którą utworzyłeś. Różnica między instancją a obiektem polega na tym, że obiekt jest metaforą, której używasz w prawdziwym świecie. Wybierasz postrzeganie faceta i samochodu jako obiektów (błędem byłoby powiedzieć, że postrzegasz je jako instancje) współpracujących między sobą. A potem używasz go jako inspiracji do tworzenia kodu. Instancja istnieje w twoim programie dopiero po utworzeniu prototypu lub klasy. „Obiekty” istnieją poza komputerem, ponieważ jest to mapowanie, którego używasz do połączenia świata rzeczywistego z programem. Łączy faceta z instancją sterownika utworzoną na komputerze. Tak więc obiekt i instancja są niezwykle powiązane, ale nie są dokładnie takie same (instancja jest „odnogą” obiektu w programie, a druga „noga” znajduje się w świecie rzeczywistym).

user1494736
źródło
0

Myślę, że najlepsza odpowiedź została już rozdana.

Klasy są planami, a obiekty to budynki lub przykłady tego planu również mi się przydały.

Czasami chciałbym pomyśleć, że klasy są szablonami (jak w MS Word), podczas gdy obiekty to dokumenty, które używają szablonu.

Geosfera
źródło
0

Rozszerzając jeden z wcześniej podanych przykładów w tym wątku ...

Rozważ scenariusz - istnieje wymóg, aby w sąsiedztwie wybudować 5 domów na cele mieszkalne. Wszystkie 5 domów ma wspólną architekturę konstrukcyjną. Architektura konstrukcji to klasa . Dom jest obiektem . Każdy dom, w którym przebywają ludzie, jest przykładem .

GeekSpecs
źródło