Interface C# vs Class C++

2018-11-04 13:40
WojtekK
0

Cześć,
uczę się C# i zastanawiam się czy jest jakaś znacząca różnica między Interfacem w C# a klasą np. abstrakcyjna w C++ po której będziemy dodatkowo dziedziczyć?
W C# nie możemy dziedziczyć po wielu klasach, ale w C++ już tak. Zamiast tego możemy dziedziczyć po wielu Interface'ach. W C++ nie ma natomiast Interface'ów, ale można dziedziczyć po wielu klasach...
Różnica jest na pewno taka, że class-y w C++ mogą zawierać m.in. zmienne składowe, a w Interface'ach już nie ma takiej możliwości, ale to akurat chyba na + dla C++ :P.

Proszę o waszą wypowiedź w tym zakresie. Próbuję lepiej zrozumieć mechanizm Interface'ów.

Pozostało 580 znaków

2018-11-04 14:13
0

Wielodziedziczenie ma jedną bardzo poważną wadę. Prowadzi do pierdyliona zależności i przetestowanie czegoś takiego to masakra. Podobnie będzie z refaktoryzacją.
W C# masz też klasy abstrakcyjne.
Operowanie na interfejsach masz zaaplikowane w niektórych wzorcach projektowych, np metoda wytwórcza, w której możesz tworzyć klasy nie znając logiki zawartej z metodach, właśnie dzięki interfejsom.

edytowany 1x, ostatnio: GironX, 2018-11-04 14:14

Pozostało 580 znaków

2018-11-04 14:20
2

To jest wszystko mocno umowne. W C++ nie ma interfejsów, ale czym jest totalnie abstrakcyjna klasa niezawierająca pól, z samymi pustymi metodami, np.

class foo {
public:
  virtual void doStuff() = 0;
  virtual ~foo() { }
}

jeśli nie interfejsem właśnie?

Pozostało 580 znaków

2018-11-04 15:04
WojtekK
0

@alagner no właśnie o to mi chodziło - wiele słyszałem o tym jaki to C# jest wspaniały bo ma chociażby te interface'y, a jak teraz tak się o tym uczę to jakoś nie rozumiem czym się ludzie zachwycają, bo przecież to samo można zrobić przy pomocy klasy abstrakcyjnej/pustej w C++. I właśnie nie byłem pewny czy to ja źle to rozumiem czy może nie ma się czym zachwycać i bać (dopiero uczę się używać tych interface'ów).

Pozostało 580 znaków

2018-11-04 15:15
0
alagner napisał(a):

To jest wszystko mocno umowne. W C++ nie ma interfejsów, ale czym jest totalnie abstrakcyjna klasa niezawierająca pól, z samymi pustymi metodami, np.

class foo {
public:
  virtual void doStuff() = 0;
  virtual ~foo() { }
}

jeśli nie interfejsem właśnie?

No jednak interfejs, to trochę mniej znaków.
I przede wszystkim nie chodzi o to, że są interfejsy, ale że nie ma wielodziedziczenia. Interfejsy to bardziej efekt takiego podejścia niż cel w sam sobie.


"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

2018-11-04 15:49
0

No generalnie tak jak @somekind pisze, idzie o zwięzłość/czytelność. W C++ nastukasz się tych class+destruktorów wirtualnych, nazerujesz metod itd., w C# po prostu napiszesz "interface" i wiadomo o co chodzi, a efekt będzie +- ten sam (nie wiem jak C# działa pod maską, stąd to +-, ktoś oblatany w ce-płotku może tutaj doprecyzować).

Wielodziedziczenie jest probematyczne w momencie kiedy dochodzisz do "diamentu".
https://medium.freecodecamp.o[...]-diamond-problem-7c12a9ddbbec

edytowany 2x, ostatnio: alagner, 2018-11-04 15:51
diament dziedziczenia to trochę wyolbrzymiony „problem”... - Azarien 2018-11-04 17:17

Pozostało 580 znaków

2018-11-04 16:45
WojtekK
0

Dziękuję wszystkim za udział w wątku.

Pozostało 580 znaków

2018-11-04 20:57
kq
0

Największą zaletą interface jako osobnego konceptu jest to, że kompilator powstrzyma Cię (lub kolegę z akwarium, który dobrych praktyk uczył się na bootcampie) przed niefrasobliwym dodaniem niestatycznych zmiennych.

Sam brak wielodziedziczenia cały czas uważam za wadę, taka opcja powinna zostać pozostawiona programiście.


Na którymś cppconie chyba była mowa o czymś w stylu „annotated C++”, gdzie do klasy możnaby dopisywać „interface”, wtedy kompilator sam miałby wygenerować wirtualny desktrutor i sprawdzać brak implementacji metod czy „datatype” zapewniający brak metod w klasie. Kojarzysz może? Bo chcę to sobie odświeżyć a nie potrafię tego znaleźć... - alagner 2018-11-04 22:01
To "generative C++" wyglądało trochę jak "moje impresje n.t. C++/CLI i co z niego zamierzamy ustandaryzować". Mam nadzieje że to tylko taka pogadanka. - vpiotr 2018-11-04 23:24

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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