Czy to że nie można utworzyć zmiennych typu Type Class łamie zasadę podstawienia Liskov?

1

Jak w temacie. Moje założenia:

  • Type Classa -> typ bazowy
  • Instancja Type Classy -> typ konkretny

Czy to że nie można tworzyć zmiennych typu bazowego łamie zasadę podstawienia Liskov?

Problem dotyczy też Rusta. Czy można stworzyć tam zmienną typu trait? Założenia

  • Trait -> typ Bazowy
  • Implementacja traita dla struktury -> typ konkretny
1

Nie wiem czy rozumiem te naukową nomenklature, ale instancji klasy abstrakcyjnej rowniez nie mozna tworzyc i ma sie to nijak do Liskov.

1
KamilAdam napisał(a):

Problem dotyczy też Rusta. Czy można stworzyć tam zmienną typu trait? Założenia

  • Trait -> typ Bazowy
  • Implementacja traita dla struktury -> typ konkretny

nie wiem o co dokładnie chodzi, ale jest coś takiego jak trait object
https://doc.rust-lang.org/reference/types/trait-object.html
https://doc.rust-lang.org/book/ch17-02-trait-objects.html

ograniczenie jest takie, że trait object może być alokowane tylko na stercie, więc na stosie może być tylko wskaźnik do trait object

inna sprawa to to, że trait object działa wolniej niż typowe generyki rustowe (trait object = metody wirtualne, bez dynamicznej dewirtualizacji, zwykłe generyki = monomorphization, czyli coś a'la template z c++)

0
Charles_Ray napisał(a):

Nie wiem czy rozumiem te naukową nomenklature, ale instancji klasy abstrakcyjnej rowniez nie mozna tworzyc i ma sie to nijak do Liskov.

No ale w języki OO możesz przypisać zmienną konkretną do zmiennej typu bazowego, zmiennej typu klasy abstrakcyjnej czy zmiennej typu interfejsu, czy wręcz do zmiennej typu Object/Any

0

Definicja z wiki jak i chłopski rozum mi mówią tyle, że jak jak coś można zrobić z x będącym/implementującym T to to samo (lub więcej) da się zrobić z y i S, gdzie S jest pod typem T. x to nie T więc dla mnie to nie łamie LSP. Zresztą w OOP też mamy klasy abstrakcyjne/interfejsy, których nie da się stworzyć

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