Instalacija ...
Imejl konverzija na CLUG mailing listu dobija temu za rad Objekatski orijentisani program (sa runtime polimorfizam) u ne-OO jeziku nalik C. Šta bi bilo potrebno, kako bi kod izgledao i da li vredi?
Problem...
Ovde je mali primer OO programa koji koristi sledeće klase:
|<<interface>>|
| Shape |
A
|
+---------+-------+
| |
|Rectangle| |Circle|
Oblik obezbeđuje apstraktni interfejs koji podržava
Draw(), MoveTo(x,y), and
RMoveTo(dx,dy) metode.
Pravougaonik i
krug podržavaju taj interfejs kao i definisanje svojih specifičnih metoda (npr.
SetRadius(newRadius) za
Krug)
Napomena:
Moja namera je bila da Oblik klase bude čist interfejs, sa svim primenama u izvedenim klasama. Nekoliko primera pomera MoveTo i RMoveTo metode implementacije u oblik klase. To svakako smanjuje suvišnost i to je prihvatljiva optimizacija za ovaj primer.
Izazov ...
Prvobitno sam proizveo C i C + + verzije programa. Neko je na CLUG listi ponudio Perl verziju. Pa sam pomislio da bi bilo interesantno videti ovaj mali problem napisan na nekoliko različitih jezika OO (ili ne-OO jezicima sa ručnim polimorfizma).
Rezultati ...
OO jezici
Jezici u ovoj tabeli daju neku vrstu podrške za objektsko orijentisano programiranje.
jezik doprineli
Language |
Contributed By |
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 |
Groovy (version 1) |
Marcelo da Silva Gomes |
Groovy (version 2) |
Marcelo da Silva Gomes |
Io (version 1) |
Steve Dekorte |
Io (version 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 (version 1) |
Monty Stein |
Python (version 2) |
Rico Schiekel |
Ruby (version 1) |
Chris Rathman |
Ruby (version 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 |
Osnovne Potrebe non-OO Jezika
Jezici u ovoj kategoriji osnovnih potreba ne daju potrebne karakteristike Object Oriented programiranja.
Language |
Contributed By |
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 |
Posebne namene jezika
Jezici u ovoj kategoriji su jezici specijalne namene. Ovo uključuje stvari kao što su skript jezika i baze podataka jezika. Stavke u ovoj kategoriji zaista
šire granice da bi bili u stanju da se uradi polimorfizam.
Language |
Contributed By |
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 |
Skoro, ali ne baš ...
Brajs Džejkobs nudi XBase verziju. Nažalost, Brajs verzija nudi samo ograničen oblik polimorfizma (gde osnovna klasa mora da nabroji sve potklase). Brajs takođe nudi neke opšte kritike OO paradigme u kojima možda možete uživati.
Podnošenje novog jezika
Svako može da podnese verziju, samo mi je pošaljite, Jim Veirič na jim@weirichhouse.org.
Ako
ne pošaljete u primeru, sledeće smernice će mi na kraju olakšati:
- Ako ćete da podnesete jezik koji je već na listi, proverite da li se nova verzija razlikuje na zanimljiv način. (Drugim rečima, male razlike u oblikovanju ili preimenovanja promenljivih nisu interesantni)
- Kod može biti predstavljen u onoliko fajlova koliko je potrebno za vaš jezik. Ako želite da imate fajlove sortirane u određenom redosledu, prefiks ime fajla sa brojem i naglašavanjem. (Npr. 01_shape.c, 02_rect.c).
- Uključite izlaz programa u fajlu pod nazivom 'output.tkt'..
- Spremite sve zajedno za slanje e-poštom kao tar ili zip fajl.
- Ako biste radije da imate blog ili sajt URL adresu povezanu sa
Vašim imenom u tabeli uplatioca doprinosa, samo recite to. Inače ću povezati sa Vašom imejl adresom. Ako ne želite vezu, to je ok.