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

Klasy abstrakcyjne oraz sposob wykonywania metod - JS

Object Storage Arubacloud
0 głosów
1,060 wizyt
pytanie zadane 10 października 2018 w JavaScript przez Whatisit Początkujący (390 p.)

Witam,

 

1. Czy dobrym rozwiazaniem jest gdy klasa abstrakcyjna dziedziczy po innej klasie abstrakcyjnej?

 

przykladowo: czlowiek (abstrakcyjna) > zolnierz (abstrakcyjna) > snajper (normalna z mozliwoscia stworzenia obieku w oparciu o nia)

 

2. Dobrym rozwiazaniem jest, gdy AI sterujacy postacia (obiektem) jest umieszczone w jego wlasnej metodzie, z ktorej odpala automaycznie inne metody, ktore po zakonczeniu przetwarzania wykonuja metoda AI itd. w nieskonczonosc.

...

this.ai = function () {

if(...) {this.move}
else if(...) {this.shoot}
else {this.heal}


}

this.move = function(){

// dosth

setTimeout(this.ai(),1000); // pod warunkiem jesli chce dodac odstep czasu 1s

// lub this.ai(); // jesli bez odstepu sekundy.
}

...

 

1 odpowiedź

0 głosów
odpowiedź 10 października 2018 przez mbabane Szeryf (79,280 p.)
edycja 10 października 2018 przez mbabane
 
Najlepsza

przykladowo: czlowiek (abstrakcyjna) > zolnierz (abstrakcyjna) > snajper 

Jeśli taka struktura jest Ci potrzebna to dlaczego nie. Masz dzięki temu specyficzne zachowania żołnierza odseparowane od człowieka, a jeśli w Twoim programie żołnierz ma być człowiekiem to jest to jak najbardziej prawidłowe. Tutaj wszystko zależy od potrzeb aplikacji i ewentualnie czy tak skomplikowana struktura jest rzeczywiście konieczna.

Dzięki takiej abstrakcji możesz uogólniać pewne elementy innych rzeczy np. wstawianie snajpera lub sapera na planszę w grze w zasadzie będzie identyczne. Jeśli nie miałbyś odpowiedniej struktury danych tylko pojedyncze klasy Snajper i Saper to musiałbyś zrobić dwie praktycznie identyczne metody klasy Plansza, a różnicą byłby tylko typ przyjmowanego argumentu (JS za bardzo nie znam więc zastosuje notację języka Java):

class Plansza
{
	void wstawSapera(Saper saper) { 
		//cos tam
    }
     void wstawSnajpera(Snajper snajper) { 
		//praktycznie bedzie to samo co dla wstawSapera
	}
}

Powiedzmy, że kiedy masz tylko dwie klasy Snajper i Saper to jakoś to działa i jesteśmy w stanie przegryźć ten zdublowany kod. Tylko co w sytuacji kiedy nagle wymyślmy nowy typ żołnierza np. Medyk lub po prostu jest ich więcej - trzeba będzie dopisać kolejną wersję metody wstawXXX do klasy Plansza - do kitu. Dzięki polimorfizmie i dziedziczeniu można uogólnić wstawianie żołnierza na plansze stosując abstrakcje w postaci ogólnej klasy Żołnierz.

class Plansza
{
	void wstawZolnierza(Zolnierz zolnierz)
	{
		//implementacja
	}
}

Piękna sprawa, dodaje nowy typ żołnierza do projektu a plansza nadal działa tak samo.

Idąc dalej można jeszcze bardziej uogólniać metodę wstaw jeśli będzie to konieczne bo np. ogólnie wstawianie Człowieka na planszę będzie wyglądało tak samo jak Żołnierza, Policjanta, Strażaka, Listonosza:

class Plansza
{
	void wstaw(Czlowiek czlowiek)
	{
		//implementacja
	}
}

Abstrakcyjne klasy w takich hierarchiach są odpowiednikami czegoś bardzo ogólnego czego nie da się jednoznacznie skonkretyzować. Jak ktoś Cię zapyta czy masz zwierze domowe i odpowiesz "tak mam psa" - to czy po tym jest wstanie wyobrazić sobie tego psa? Raczej nie. Więc potem dopytuje Cię o szczegóły tego psa, a Ty odpowiadasz "no ten pies biega, szczeka". Osoba pytająca nadal nie wie jakiego masz tego psa, ale mówisz "to jest owczarek niemiecki długowłosy" - i już wiadomo o co chodzi - da się go konkretnie wyobrazić. Pies jest abstrakcyjnym elementem, którego nie da się jednoznacznie wyobrazić (utworzyć) natomiast owczarek niemiecki długowłosy będzie obiektem konkretnym bo da się go jednoznacznie wyobrazić (utworzyć).

Podobne pytania

0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 17 kwietnia 2019 w PHP przez Ksiaze Snu Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 715 wizyt
pytanie zadane 2 października 2018 w JavaScript przez MrxCI Dyskutant (8,260 p.)
0 głosów
2 odpowiedzi 516 wizyt

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...