Tablica funkcji, alternatywy polimorfizmu.

0

Cześć czy jest coś takiego jak tablica funkcji ? Tak jak jest tablica zmiennych?
Zastanawiam się nad tym bo w artykule który przeczytałem żeby sobie odkurzyć wiedzę. Przeczytałem że polimorfizm jest po to aby jakby "iterować funkcje " tak jak tablice zmiennych w pętlach z wiadomych przyczyn. Ale nie mogli tego rozwiązać po przez tablice funkcji. po prostu po nazwie funkcji podawać numer. Aż się dziwię jeśli tego nie zrobili. Ciekawa jest też kwestia tego że funkcja może być parametrem funkcji i konstruktora klasy(użycie tego wydaje mi się taką trochę alternatywą dla polimorfizmu). Wydaje to się prostsze niż polimorfizm. To o czym piszę. Ale często spotykam polimorfizm . A alternatywy które pełnią funkcje polimorfizmu tak jakby rzadziej.
https://javastart.pl/baza-wiedzy/programowanie-obiektowe/polimorfizm

podałem artykuł. Znałem już wcześniej polimorfizm. Ale z takim uzasadnieniem jego użycia spotykam się pierwszy raz.

2
kamil kowalski napisał(a):

Cześć czy jest coś takiego jak tablica funkcji ? Tak jak jest tablica zmiennych?

Ale w jakim języku? W jakimś konkretnym? W większości możesz zrobić tablicę lambd lub tablicę wspkaźników na funkcje

Zastanawiam się nad tym bo w artykule który przeczytałem żeby sobie odkurzyć wiedzę.

A możesz podać link do tego artykułu bo z twojego opisu niewiele rozumiem

Przeczytałem że polimorfizm jest po to aby jakby "iterować funkcje " tak jak tablice zmiennych w pętlach z wiadomych przyczyn.

Jakby to nie jest określenie precyzyjne, Albo się iteruje, albo nie. W ogóle nie czuję porównania między polimorfizmem i iterowanie funkcji (co kolwiek to znaczy)

0

Trochę nie rozumiem co ma do tego polimorfizm, ale w wielu językach, włącznie z prymitywnymi typu C, można deklarować tablice funkcji (czy tam wskaźniki na funkcje, delegaty, jak zwał tak zwał) i po nich iterować.

1

@kamil kowalski: Chyba rozumiem o co ci chodzi, ale alternatywa którą chcesz zbudować trochę nie ma sensu bo w językach OOP generuje nadmiarowy kod (przynajmniej w tych co znam). Postaram się to zilustrować w Scali (nie podałeś języka a Scalęznam najlepiej)

// Klasy na których pracujemy
// trait o klasa abstrakcyjna bez konstruktora
trait Animal {
  def voice : Unit
}

class Cat extends Animal {
  def voice = println("Miau") 
}

class Dog extends Animal {
  def voice = println("Hau Hau") 
}

// Tworzymy tablicę obiektów
val arrayOfObjects = Array( new Cat, new Dog, new Dog, new Cat, new Cat, new Cat)

// Polimorficzne wołamy `voice`
arrayOfObjects.foreach(_.voice)

// Konwertujemy tablicę obiektów na tablicę funkcji
// Chociaż jest to trochę kłąmstwo bo w Scali funkcja to też obiekt, taka patologia jezyka
val arrayOfFunctions = arrayOfObjects.map(o => () => o.voice)

// Wywołujemy funkcje z tablicy
// W Scali funkcje to obiekty mające metodę `apply`
arrayOfFunctions.foreach(_.apply)

Może w C++ można by to lepiej przedstawić, ale C++ nie znam

2

@kamil kowalski pytanie jest bardzo niejasne, ale warto moze wspomnieć że przecież w C++ polimorfizm jest zaimplementowany przez... tablicę funkcji! :D https://en.wikipedia.org/wiki/Virtual_method_table

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