Przykładowy kod obiekt zorientowany (OO)

This is the translation. The original web-page (oryginalna strona): http://onestepback.org/articles/poly/

Ustawić…

Konwersja e-mail na CLUG listy dostaje temacie robi obiektowego programu (z polimorfizmem wykonawczego) w non-obiekt zorientowany język jak C Co trzeba zrobić, co wygląd jak i kod będzie czy warto?

Problem…

Oto mały przykład programu obiekt zorientowany, który używa następujących klas:

                    |<<berło>>|
                    | Kształt |
                         A
                         |
               +---------+-------+
               |                 |
          |Prostokąt|         |Okrąg|

Kształt zapewnia abstrakcyjny interfejs, który obsługuje Draw()MoveTo(x,y), i RMoveTo(dx,dy) metody. Prostokąt i okrąg obsługują ten interfejs, a także definiują własne metody (np. SetRadius(newRadius) dla Koła).

Uwaga: Moim zamiarem było mieć klasę Shape być czysty interfejs, z całą realizacji w klasach pochodnych. Kilka przykładów przesuwać implementacje MoveTo i metody RMoveTo do klasy kształt. To z pewnością zmniejsza redundency i optymalizacja jest dopuszczalne dla tego przykładu.

Wyzwanie…

Początkowo stworzyłem wersje programu C i C++. Ktoś na liście CLUG zaoferował wersję Perla. Pomyślałem więc, że byłoby interesujące zobaczyć ten mały problem napisany w kilku różnych językach obiekt zorientowany (lub innych niż obiekt zorientowany z ręcznym polimorfizmem).

Wyniki…
obiekt zorientowany Języki

Języki w tej tabeli dostarczyć trochę rodzaju wsparcie dla programowania obiektowego.

Język Wniesiony przez
Beta Chris Rathman
Cecil Scott Anderson
Clojure Paul Barry
CLOS Chris Rathman
Component Pascal Chris Rathman
C++ Jim Weirich
D Leonardo
Delphi Chris Rathman
Dylan Scott Anderson
Eiffel Jim Weirich
Go Jim Weirich
Groovy (wersja 1) Marcelo da Silva Gomes
Groovy (wersja 2) Marcelo da Silva Gomes
Io (wersja 1) Steve Dekorte
Io (wersja 2) Marcelo da Silva Gomes
Ioke Marcelo da Silva Gomes
Itcl Chris Rathman
Java Jim Weirich
JavaScript Chris Rathman
LPC Scott Anderson
Modula3 Chris Rathman
Oberon Chris Rathman
Objective-C Chris Rathman
Ocaml Chris Rathman
Perl Bradley Kuhn
Perl6 Jim Weirich
Php Chris Rathman
PHP 5 Marcus Cavalcanti
Python (wersja 1) Monty Stein
Python (wersja 2) Rico Schiekel
Ruby (wersja 1) Chris Rathman
Ruby (wersja 2) Guy N. Hurst
Sather Chris Rathman
Scala Giordano Scalzo
Simula Chris Rathman
Smalltalk Chris Rathman
Visual Basic Csaba Urbaniczky
VBScript Chris Rathman
Visual Foxpro Chris Rathman

Języki ogólnego przeznaczenia inne niż obiekt zorientowany

Języki w tej kategorii są językami ogólnego przeznaczenia, które nie zapewniają żadnych funkcji programowania obiektowego.

Język Wniesiony przez
ANSI C Jim Weirich
Erlang Chris Rathman
Forth Jim Weirich
Haskell Chris Rathman
Icon Chris Rathman
Lua Marcelo da Silva Gomes
Modula2 Chris Rathman
Scheme Jim Weirich

Języki specjalnego przeznaczenia

Języki w tej kategorii są językami celowych. Obejmuje to takie rzeczy jak i języków skryptowych języków baz danych. Wpisy w tej kategorii naprawdę rozciągnąć kopertę, aby móc zrobić polimorfizm.

Język Wniesiony przez
AdvSys Scott Anderson
awk Scott Anderson
DOS Batch Scott Anderson
Foxpro Scott Anderson
Prolog Chris Rathman
Postscript Scott Anderson
sed Scott Anderson
Shell Script Monty Stein

Prawie, ale nie całkiem…

Bryce Jacobs oferuje wersję xbase. Niestety, wersja Bryce oferuje tylko ograniczoną formę polimorfizmu (gdzie klasa bazowa musi wyliczyć wszystkie podklasy). Bryce oferuje również pewną ogólną krytykę paradygmatu obiekt zorientowany których można korzystać.

Przesyłanie nowego języka

Każdy może przesłać wersję, po prostu wyślij ją do mnie, Jim Weirich, pod adresem [email protected].

Jeśli wyślesz przykład, poniższe wskazówki ułatwią mi to:

  • Jeśli zamierzasz przesłać język, który jest już na liście, upewnij się, że nowa wersja jest interesująca w inny sposób. (Innymi słowy, niewielkie różnice formatowania lub zmiany nazw zmiennych nie są interesujące)
  • Kod może być przedstawiony w tylu plikach, ile potrzeba dla twojego języka. Jeśli chcesz, aby pliki były posortowane w określonej kolejności, poprzedź nazwę pliku numerem i podkreśleniem. (na przykład 01_shape.c, 02_rect.c).
  • Dołącz dane wyjściowe programu do pliku o nazwie ‘/articles/poly/output.txt’.
  • Spakuj całość do e-maila w pliku tar lub zip.
  • Jeśli wolisz, aby blog lub adres URL witryny był powiązany z Twoim nazwiskiem w tabeli współpracowników, powiedz słowo. W przeciwnym razie będę linkować z twoim adresem e-mail. Jeśli wolisz nie mieć linku, to też jest w porządku.

[Polyglot Polymorphism Indeks]

Jim Weirich/[email protected]