SmallTalk (język programowania): Różnice pomiędzy wersjami
m (Infobox update) |
(LinkTitles.) |
||
Linia 19: | Linia 19: | ||
==Historia== | ==Historia== | ||
Smalltalk został stworzony na początku lat siedemdziesiątych przez Alana Kay’a w Xerox PARC (Palo Alto Research Center). Była to część większego projektu o nazwie ARPA. Grupa inżynierów, która opracowała Smalltalk ma na swoim koncie również takie wynalazki jak: | Smalltalk został stworzony na początku lat siedemdziesiątych przez Alana Kay’a w Xerox PARC (Palo Alto Research Center). Była to część większego projektu o nazwie ARPA. [[Grupa]] inżynierów, która opracowała Smalltalk ma na swoim koncie również takie wynalazki jak: | ||
*Mysz komputerowa | *Mysz komputerowa | ||
*Systemy okienkowe | *Systemy okienkowe | ||
Linia 28: | Linia 28: | ||
*Język programowania Smalltalk | *Język programowania Smalltalk | ||
*Wirtualna maszyna Smalltalk | *Wirtualna maszyna Smalltalk | ||
*Dokumentacja i kod źródłowy | *[[Dokumentacja]] i kod źródłowy | ||
Wirtualną maszynę udało się przeportować na wiele różnych platform co zaowocowało jego znaczącą popularyzacją. Moment w którym zaczęto uczyć się Smalltalk'a można uznać za początek rewolucji [[Programowanie_obiektowe|programowania obiektowo orientowanego (OOP)]]. Idea OOP okazała się być przełomem i wywarła spory wpływ na istniejących już językach. Wkrótce po wydaniu Smalltalk-80 pojawiły się takie produkty jak: Object-Pascal, Objective-C czy nawet obiektowy [[Cobol]]. Kilka lat później powstał C++, a w połowie lat dziewięćdziesiątych Sun Microsystems stworzył Javę. | Wirtualną maszynę udało się przeportować na wiele różnych platform co zaowocowało jego znaczącą popularyzacją. Moment w którym zaczęto uczyć się Smalltalk'a można uznać za początek rewolucji [[Programowanie_obiektowe|programowania obiektowo orientowanego (OOP)]]. Idea OOP okazała się być przełomem i wywarła spory wpływ na istniejących już językach. Wkrótce po wydaniu Smalltalk-80 pojawiły się takie produkty jak: Object-Pascal, Objective-C czy nawet obiektowy [[Cobol]]. Kilka lat później powstał C++, a w połowie lat dziewięćdziesiątych Sun Microsystems stworzył Javę. | ||
Linia 45: | Linia 45: | ||
W przeciwieństwie do np. Javy, w Smalltalk’u nie ma różnicy pomiędzy wartością i obiektem. Wszystkie są pochodnymi klasy Object i potrafią przetwarzać wiadomości. Każda instancja klasy również jest obiektem, podobnie jak blok kodu. Rozszerzanie możliwości istniejących klas realizuje się poprzez tworzenie podklas | W przeciwieństwie do np. Javy, w Smalltalk’u nie ma różnicy pomiędzy wartością i obiektem. Wszystkie są pochodnymi klasy Object i potrafią przetwarzać wiadomości. Każda instancja klasy również jest obiektem, podobnie jak blok kodu. Rozszerzanie możliwości istniejących klas realizuje się poprzez tworzenie podklas | ||
Program napisany w Smalltalk’u najpierw tłumaczony jest do postaci kodu bajtowego a następnie interpretowany w maszynie wirtualnej lub dynamicznie zamieniany na kod maszynowy. Charakterystyka języka pozwala też na dynamiczne [[zarządzanie]] pamięcią i nie wymusza zwalniania nieużywanych zasobów. Wirtualna maszyna korzysta z tak zwanego Garbage Collector’a, który rozpoznaje nieużywane obiekty i je usuwa. | [[Program]] napisany w Smalltalk’u najpierw tłumaczony jest do postaci kodu bajtowego a następnie interpretowany w maszynie wirtualnej lub dynamicznie zamieniany na kod maszynowy. Charakterystyka języka pozwala też na dynamiczne [[zarządzanie]] pamięcią i nie wymusza zwalniania nieużywanych zasobów. Wirtualna maszyna korzysta z tak zwanego Garbage Collector’a, który rozpoznaje nieużywane obiekty i je usuwa. | ||
Tworząc Smalltalk’a starano się, aby jego składnia była jak najprostsza. Przykładowo, żeby stworzyć tablicę wystarczy jedynie wywołać odpowiednią metodę, tworzącą instancję klasy Array np. „Array new: 64”. | Tworząc Smalltalk’a starano się, aby jego składnia była jak najprostsza. Przykładowo, żeby stworzyć tablicę wystarczy jedynie wywołać odpowiednią metodę, tworzącą instancję klasy Array np. „Array new: 64”. | ||
Linia 73: | Linia 73: | ||
</code> | </code> | ||
Przesłanie wiadomości <code>value:</code> do bloku podanego jako drugi [[parametr]], następuje tyle razy, ile wynosi parametr pierwszy. Wartość przekazywana jako parametr <code>:i</code> będzie wyświetlona na standardowym wyjściu poprzez przesłanie wiadomości <code>show:</code> oraz znaku nowej lini - <code>cr</code> - do obiektu <code>Transcript</code>. Taka pętla jest więc niczym więcej niż sekwencją wiadomości przesyłanych pomiędzy obiektami. | Przesłanie wiadomości <code>value:</code> do bloku podanego jako drugi [[parametr]], następuje tyle razy, ile wynosi parametr pierwszy. [[Wartość]] przekazywana jako parametr <code>:i</code> będzie wyświetlona na standardowym wyjściu poprzez przesłanie wiadomości <code>show:</code> oraz znaku nowej lini - <code>cr</code> - do obiektu <code>Transcript</code>. Taka pętla jest więc niczym więcej niż sekwencją wiadomości przesyłanych pomiędzy obiektami. | ||
Wersja z 00:13, 22 maj 2020
SmallTalk (język programowania) |
---|
Polecane artykuły |
Smalltalk jest dynamicznym, w pełni obiektowym, reflektywnym językiem programowania stworzonym na początku lat siedemdziesiątych. W przeciwieństwie do konkurentów takich jak C++ czy Java, nie wzoruje się na składni języka proceduralnego. Został zaprojektowany od podstaw by jak najlepiej realizować założenia paradygmatu obiektowego. Smalltalk to również kompletne, graficzne środowisko programistyczne, które może być uznane za przodka takich produktów jak Microsoft Visual Studio.
Historia
Smalltalk został stworzony na początku lat siedemdziesiątych przez Alana Kay’a w Xerox PARC (Palo Alto Research Center). Była to część większego projektu o nazwie ARPA. Grupa inżynierów, która opracowała Smalltalk ma na swoim koncie również takie wynalazki jak:
- Mysz komputerowa
- Systemy okienkowe
- Graficzne interfejsy użytkownika
- Programowanie orientowane obiektowo
Jego pierwszą implementacją, która posłużyła do celów naukowych był Smalltalk-72 autorstwa Dana Ingalls’a. Różniła się ona w znacznym stopniu od wersji używanych współcześnie. W wersji Smalltalk-76 do pakietu dodane zostało środowisko programistyczne wraz z edytorem bibliotek. W Smalltalk-80 wprowadzono metaklasy. Była to pierwsza wersja dostępna dla szerszego grona odbiorców. Dostęp do niego uzyskały m.in.: Hewlett-packard, DEC, czy Apple oraz niektóre uniwersytety. Wraz z zakończeniem projektu w 1980 roku, w skład systemu Smalltalk-80 wchodziły:
- Język programowania Smalltalk
- Wirtualna maszyna Smalltalk
- Dokumentacja i kod źródłowy
Wirtualną maszynę udało się przeportować na wiele różnych platform co zaowocowało jego znaczącą popularyzacją. Moment w którym zaczęto uczyć się Smalltalk'a można uznać za początek rewolucji programowania obiektowo orientowanego (OOP). Idea OOP okazała się być przełomem i wywarła spory wpływ na istniejących już językach. Wkrótce po wydaniu Smalltalk-80 pojawiły się takie produkty jak: Object-Pascal, Objective-C czy nawet obiektowy Cobol. Kilka lat później powstał C++, a w połowie lat dziewięćdziesiątych Sun Microsystems stworzył Javę.
Język
Smalltalk zyskał miano pierwszego prawdziwego obiektowego języka programowania. Obiekty w tym języku znajdują się w pewnym określonym stanie i potrafią otrzymać i wysyłać pomiędzy sobą wiadomości. Spośród popularnych dziś języków, które w mniejszym lub większym stopniu się nim inspirowały, można wyliczyć między innymi takie jak:
W przeciwieństwie do np. Javy, w Smalltalk’u nie ma różnicy pomiędzy wartością i obiektem. Wszystkie są pochodnymi klasy Object i potrafią przetwarzać wiadomości. Każda instancja klasy również jest obiektem, podobnie jak blok kodu. Rozszerzanie możliwości istniejących klas realizuje się poprzez tworzenie podklas
Program napisany w Smalltalk’u najpierw tłumaczony jest do postaci kodu bajtowego a następnie interpretowany w maszynie wirtualnej lub dynamicznie zamieniany na kod maszynowy. Charakterystyka języka pozwala też na dynamiczne zarządzanie pamięcią i nie wymusza zwalniania nieużywanych zasobów. Wirtualna maszyna korzysta z tak zwanego Garbage Collector’a, który rozpoznaje nieużywane obiekty i je usuwa.
Tworząc Smalltalk’a starano się, aby jego składnia była jak najprostsza. Przykładowo, żeby stworzyć tablicę wystarczy jedynie wywołać odpowiednią metodę, tworzącą instancję klasy Array np. „Array new: 64”.
Przyporządkowanie typów do zmiennych odbywa się dopiero w czasie wykonywania programu. Oznacza to, że do każdej zmiennej można wysłać wiadomość dowolnego typu. Jeśli nie zostanie ona rozpoznana, nastąpi wywołanie metody doesNotUnderstand
.
W Smalltalk’u, możliwe jest modyfikowanie programu w trakcie jego pracy. Pozwala to programistom na szybką implementacje i testowanie nowych funkcjonalności.
Przykładowy kod
Oto przykładowy kod napisany w języku Smalltalk:
0 to: 13 do: [:i | Transcript show: i; cr]
Choć budową przypomina, na pierwszy rzut oka, pętlę for, powyższy kod działa zgoła inaczej. 0 to obiekt klasy SmallInteger do którego przesyłamy wiadomość (message) "to: do:". Pierwszym argumentem jest 13, a drugim blok instrukcji ujęty w nawiasy kwadratowe. SmallInteger dziedziczy z klasy Number, która obsługuje przesyłaną wiadomość:
to: stop do: aBlock
| nextValue |
nextValue := self.
[nextValue <= stop]
whileTrue:
[aBlock value: nextValue.
nextValue := nextValue + 1]
Przesłanie wiadomości
value:
do bloku podanego jako drugi parametr, następuje tyle razy, ile wynosi parametr pierwszy. Wartość przekazywana jako parametr :i
będzie wyświetlona na standardowym wyjściu poprzez przesłanie wiadomości show:
oraz znaku nowej lini - cr
- do obiektu Transcript
. Taka pętla jest więc niczym więcej niż sekwencją wiadomości przesyłanych pomiędzy obiektami.
Bibliografia
- A. Goldberg, D. Robson, Smalltalk-80: The language and its implementatnion, Xerox Corporation, USA 1983, ISBN 0-201-11371-6, s. 5-37
- C. Liu, Smalltalk, Objects and Design, toExcel, Nowy Jork 1999, ISBN 1-58348-490-6, s. 1-9, 32-36
- A. C. Kay, The Early History of Smalltalk. ACM SIGPLAN Notices, s. 69–95
Autor: Szymon Depa