Metody abstrakcyjne vs interface

2015-11-11 16:31
0

Nie bardzo rozumiem po co tworzyć metody abstrakcyjne zamiast tego rozbić na samą klasę bazową + interface. Mógłby mi ktoś to rozświetlić?

Tak, przeczytałem już trochę postów na stackoverflow itp. Wiem mniej więcej jaka jest różnica pomiędzy tymi dwoma bytami, ale to jedno pytanie nie daje mi spokoju

abstract class Player
{
    // some base properties
    // and methods that i want to inherit
    abstract void Play();
} 

class VideoPlayer extends Player
{
    void Play()
    {
      //Some code.
    }
}

class MusicPlayer extends Player
{
    void Play()
    {
      //Some code.
    }
}

// ====================================== // 

interface IPlayable 
{
    void Play();
}

abstract class Player
{
    // some base properties
    // and methods that i want to inherit
} 

class VideoPlayer extends Player implements IPlayable
{
    void Play()
    {
      //Some code.
    }
}

class MusicPlayer extends Player implements IPlayable
{
    void Play()
    {
      //Some code.
    }
}
edytowany 2x, ostatnio: Desu, 2015-11-11 16:35

Pozostało 580 znaków

2015-11-11 16:37
2

Lekcja na dziś: template method.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-11-11 16:38
3

posiadanie zarowno wspolnej klasy bazowej jak i abstrakcyjnej dla Video i Music playera nie wydaje mi sie dobrym pomyslem. interfejs Player (lub jesli wolisz IPlayer) jak najbardziej moze i powinien byc wspolny, ale jesli chodzi o implementacje to tak srednio, imo lepiej zastosowac kompozycje niz dziedziczenie w tym wypadku.

Pozostało 580 znaków

2015-11-11 16:45
0

posiadanie zarowno wspolnej klasy bazowej jak i abstrakcyjnej dla Video i Music playera nie wydaje mi sie dobrym pomyslem.
Czy to oznacza, że bazowa klasa abstrakcyjna to ogólnie zły pomysł, czy tylko w tym wypadku?

Pozostało 580 znaków

2015-11-11 16:48
0

Tylko w tym przypadku


Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2015-11-11 16:57
1

nie lubie dziedziczenia bo zazwyczaj wynika z lenistwa (zamiast stworzyc nowa klase, latwiej odziedziczyc to co chcemy i dodac/odjac pare rzeczy, po pewnym czasie konczy sie wielkim burdelem).
w tym konkretnym wypadku nie widze argumentu za dziedziczeniem, lepiej zrobic 2 klasy MoviePlayer i MusicPlayer implementujace Player + jakies dodatkowe klasy ktore maja ich czesc wspolna

Pozostało 580 znaków

2015-11-11 17:09
1

Nie demonizowałbym, czasem dziedziczenie ma sens, a czasem go nie ma ;) Robienie delegacji na siłę też bywa głupie, bo potem się nagle okazuje że mamy klasę która deleguje 100 wywołań metod a jedną nadpisuje i ewidentnie należało tutaj dziedziczyć.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
"jakies dodatkowe klasy ktore maja ich czesc wspolna" - rozumiem, że dzięki delegacji możemy z tych dodatkowych klas skorzystać? Bo pierwsze co mi się pojawiło to kolejne pytanie jak tych klas użyć bez dziedziczenia. - Desu 2015-11-11 17:12

Pozostało 580 znaków

2015-11-11 18:30
1
katelx napisał(a):

nie lubie dziedziczenia bo zazwyczaj wynika z lenistwa (zamiast stworzyc nowa klase, latwiej odziedziczyc to co chcemy i dodac/odjac pare rzeczy, po pewnym czasie konczy sie wielkim burdelem).

Ale to burdel w kodzie wynika z lenistwa, a nie dziedziczenie. Dziedziczenie to mechanizm, który ma swoje sensowne zastosowania, a to, że ktoś tego źle używa, to już nie dziedziczenia wina.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-11-11 18:37
0

generalnie dobre pytanie. I generalnie należy preferować kompozycje (interfejsy) od dziedziczenia. Ale jak zostało wcześniej napisane - to zakazy od konkretnego przypadku. Często dziedziczenie jest przydatne, ale nigdy nie powinno być używane tak, jak zresztą już odradza @katelx


Pozostało 580 znaków

2015-11-12 13:55
0

nie twierdze ze sam mechanizm w sobie jest zly, tak jak nie sa zle np. switche, po prostu czesto sie spotykam z naduzywaniem takich konstrukcji i mysle ze swiat bylby lepszym miejscem gdyby to kompozycja byla rozwazana jako domyslne rozwiazanie a dziedziczenie dopiero po solidnym przemysleniu.
a tak to wychodza pozniej takie kwiatki ze w klasie bazowej jest if na typ tego co zwraca metoda wirtualna ;)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0