• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zrozumieć programowanie obiektowe...

Object Storage Arubacloud
0 głosów
1,793 wizyt
pytanie zadane 7 maja 2018 w Java przez Tytanohinoid Początkujący (370 p.)
edycja 7 maja 2018 przez HaKIM

Witam

Mam pewne problemy ze zrozumieniu niektórych aspektów programowania obiektowego. Chodzi mi tutaj np. o stworzenie obiektu jednej klasy i do tego obiektu przypisanie innej. Coś takiego : 

public class A {

//kod

}

public class B {

//kod

}

public static void main(String[] args) {

A obiekt = new B();

}

Może ktoś łopatologicznie wytłumaczyć jak to działa? Chodzi o to, że do obiektu klasy A zostaję przypisane wszystkie funkcjonalności z klasy B (w sensie możemy korzystać ze wszystkich pół i metod, które są w klasach A i B)?

 

Inna sprawa to "przypisywanie" różnych obiektów do innego obiektu. Chodzi mi m.in. o coś takiego : 

Connection conn = dbConnection.getConnection();
this.data = FXCollections.observableArrayList();

Nie wiem czy dobrze, ale gdzieś wyczytałem, że chodzi o tzw. wrapowanie. Proszę o wyjaśnienie jak to działa, takie dodawanie pól/metod i przypisywanie do obiektu.

Proszę także o wyjaśnienie co znaczy "opakowanie" klasy/metody. Czy to samo co "wrapowanie"?

Jeśli ktoś może polecić dobre filmiki/tutoriale z tłumaczeniem to będzie super. Ale chodzi mi o takie, po których można to zrozumieć.

1 odpowiedź

+1 głos
odpowiedź 7 maja 2018 przez Wiciorny Ekspert (269,710 p.)
wybrane 7 maja 2018 przez Tytanohinoid
 
Najlepsza

A obiekt = new B();

Nie zadziała jeśli obiekty te : nie sa w pewien sposób ze sobą powiązane, na zasadzie POLIMORFIZMU i lub dziedziczenia

Jak to jest w praktyce? 

załóżmy że A jest rodzicem ( Jest to tatuś i ma pewne cechy w tym jest bardzo upierdliwy )

mamy potomka B- jest dzieckiem rodzica A ( czyli dziedziczy wszystkie cechy po A, jest też upierdliwy- ale ma swoją własną cechce - jest inteligentny :D )

Załóżmy, że mamy obiekt dziecka B jednak chcemy wywoływać na nim metody ( funckjonalności np pobranie tylko tego że jest upierdliwy, a nie tego że jest inteligentny ),

W tym wypadku jeśli przypiszemy. 

A obiekt = new B();
// w tym wypadku obiekt 

 Tutaj co prawda przypisujemy obiekt B który jest inteligentny i upierdliwy do obiektu A, co powoduje że odwołując sie do funkcjonalności obiektu  możemy korzystać tylko z tego co "Zawiera sobie klasa A", czyli nie dowiemy sie czy jest inteligetny ale wiemy że bedzie upierdliwy

obiekt.jestUpierdliwy(); // zadziała

obiekt.jestInteligentny() // wywolanie tego nie zadziala, jesli metoda ta jest w klasie B. 

Więc tutaj WARTOŚĆ ( REFERENCJA DO OBIEKTU ZWRACANEGO ) tego co zwracasz decyduje o funkcjonalności dla tego obiektu.

WIĘCEJ O PRZYPISYWANIU OBIEKTU DO RÓŻNYCH OBIEKTÓW TO PO PROSTU PODSTAWA OOP CZYLI POLIMORFIZM 

http://naukajavy.pl/kurs-jezyka-java/93-polimorfizm        -- tutaj odsyłam 

http://www.altcontroldelete.pl/artykuly/programowanie-obiektowe-polimorfizm/ - i tutaj

Generalnie Polimorfizm i dziedziczenie idzie ze sobą w parze i te dwa aspekty musisz się nauczyć 

 

 

komentarz 7 maja 2018 przez Tytanohinoid Początkujący (370 p.)
edycja 9 maja 2018 przez Tytanohinoid

Dzięki za odpowiedź.

Mam jeszcze jeden przykład z kursu. Składa się z klasy Car i Engine.

public class Car() {

int hp;

Engine myEngine;



Car my2car = new Car();

my2car.hp = 120;

Car my3car = new Car();

my3car.hp = 1000;

Engine bigEngine = new Engine();

my3car.myengine = bigEngine;

}

I problem leży w ostatniej linijce, której nie rozumiem. Przedostatnia to stworzenie obiektu klasy Engine oraz bigEngine jako zmienna referencyjna, która wskazuje na ten obiekt. Ale jak mam rozumieć ostatnią linijkę? my3car.myengine - jak to rozumieć?

 

komentarz 8 maja 2018 przez Wiciorny Ekspert (269,710 p.)

Przedostatnia stworzenie obiegtu klasy Engine oraz bigEngine jako zmienna referencyjna

 

Engine bigEngine = new Engine();

Co tu się dzieje? Tworzysz obiekt klasy Engine ( nazywasz go bigEngine) ale zarówno tutaj wartość zwracana jest obiektem typu przypisanego Engine().

my3car.myengine = bigEngine;

obiekt my3car jest  typu Car  prawda? 

Wewnątrz wszystkich obiektów Car ( masz Obiekt Engine -) logiczne każdy samochód ma swój śilnik

zatem my3car.myengine - jest to odwołanie się do pola ( składowej klasy obiektu my3car)

Czyli odwołujesz sie do silnika tego samochodu i przypisujesz mu wartość bigEngine.

Dla przykładu. 

Tworzysz Samochód  Audi - >     Car audi = new Car ();

tworzysz silnik  Engine silnikAudi = new Engine();

no to teraz wypadało by ustawić składową ( która wewnatrz klasy Car nazywa sie  myEngine- na potrzeby zamieńmy na mojSilnik , pole w samochodzie na konkretną wartość zatem ?

 

audi.mojSilnik = silnikAudi;   
// ustawiamy wartosc pola obiektu audi na konkretny silnik 

Co warto dodać zauważ że w klasie pole mojSilnik jest typu Engine zatem silnikAudi jest tez typu Engine, jasne? 

komentarz 9 maja 2018 przez Tytanohinoid Początkujący (370 p.)
Zatem my3car.myEngine to odwołanie się do pola myEngine klasy Engine, ale w klasie Car?

Czyli dzięki temu odwołyjemy się do myEngine i możemy nadać tej zmiennej wartość?

WIęc jeśli w następnej linijce przypisujemy my3car.myEngine = bigEngine. to bigEngine zostaje przypisane do obiektu myEngine, który to jest obiektem dostępnym w klasie Car?

"Ustawić wartość składowej na konkretną wartość". Masz na myśli to co napisałem wyżej? Czyli z przypisaniem myEngine = bigEngine?
komentarz 9 maja 2018 przez Wiciorny Ekspert (269,710 p.)

Zatem my3car.myEngine to odwołanie się do pola myEngine klasy Engine, ale w klasie Car?

tak dokładnie, zauważ że klasa Car ma w sobie takie pole.

Dokładnie tak w ten sposó tej zmiennej nadajemy wartość. Zauważ, że może być wiele samochodów tzn. obiektów klasy Car : car1, car2, car3-  każdy z nich ma swój własny silnik ( pole Engine ) - wiec musisz nadać ten silnik, bo przecież 2 samochody na pewno nie mają tego samego silnika o ile nie jest to ten sam samochód

Ustawić wartość składowej na konkretną wartość". 

tak mam na myśli ustawić wartość silnika, bo w momencie tworzenia twojego obiektu ... samochód nie ma silnika bo nigdzie nie ustawiłeś jego wartości  

komentarz 11 maja 2018 przez Tytanohinoid Początkujący (370 p.)
edycja 11 maja 2018 przez Tytanohinoid
Dzięki, wszystko powoli staje się jasne!

Możesz mi jeszcze napisać jak to wygląda później z nadaniem wartości dla bigEngine? Bo tworzymy tutaj obiekt klasy MyEngine (czyli bigEngine), ale nie ma on wartości (jest wartości null?). Jak to później wygląda, jeśli chcemy np. przypisać jakąś wartość do tego obiektu i jakie to mogą być wartości?

I właściwie co daje nam taki zapis : Car my5car = new Engine(); ?

Funkcjonalności i tak mamy tylko z klasy Car, z Engine nie możemy korzystać. Więc dlaczego by nie zapisać Engine engine = new Engine(); ?  I wtedy jeśli klasa Engine dziecziczy po Car to w obiekcie engine mamy funkcjonalności obu klas.

Podobne pytania

0 głosów
3 odpowiedzi 635 wizyt
0 głosów
2 odpowiedzi 179 wizyt
0 głosów
1 odpowiedź 182 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...