Smalltalk
Smalltalk jest w pełni obiektowym, reflektywnym językiem programowania z dynamicznym typowaniem. Umożliwia inny sposób programowania od tego, do jakiego są przyzwyczajeni programiści używający języków obiektowych (np. Java), rozwiniętych z wcześniejszych języków proceduralnych takich jak Pascal czy C.
Smalltalk jest także biblioteką klas i środowiskiem programistycznym w jednym.
Język
Pojęcie "czysto obiektowy" oznacza, że każda wartość, każda struktura danych jest obiektem i nie istnieje sztuczne rozgraniczenie wartości i obiektów. Przykładowo wyrażenie "26" tworzy instancję klasy SmallInteger, która poprzez hierarchię klas jest pochodną klasy Object. W ten sposób liczba 26 rozumie wszystkie wiadomości (messages), które są w tej hierarchii zdefiniowane i może również implementować nowe metody. Podobnie tablice nie są tworzone przy pomocy specjalnej dedykowanej składni, tylko w prosty sposób przez wysłanie do klasy Array odpowiedniej metody tworzącej instancję tej klasy, np. "Array new: 4".
Pojęcie "reflektywny" oznacza, że obiekty, które ten język definiują, same są opisane w tym języku. W szczególności klasy i metody są również obiektami języka Smalltalk. To wyjaśnia także powyższy przykład tworzenia instancji klasy Array – "Array new: 4". Klasa Array sama jest również obiektem, który między innymi implementuje metodę "new:". Użycie obiektów języka Smalltalk do definicji całego języka umożliwia programiście zarówno rozszerzanie funkcjonalności samego języka, jak i całego środowiska programistycznego.
Tak jak każdy język programowania, również Smalltalk posiada typy danych – typem danego obiektu jest jego klasa – ale przyporządkowanie typu do danej zmiennej następuje dopiero w czasie działania programu, tzn. typ zmiennej nie musi być deklarowany w czasie implementacji. Każda zmienna może przechowywać obiekty dowolnego typu. Oznacza to między innymi, że do każdej zmiennej można wysłać dowolną wiadomość. W przypadku gdy obiekt reprezentowany przez tę zmienną nie implementuje danej metody, sytuacja taka będzie rozpoznana i wywołana zostanie specjalna metoda doesNotUnderstand:.
Całe środowisko programistyczne jest zaimplementowane w Smalltalku. Kompilator, Debugger, Browser są aplikacjami smalltalkowymi i z reguły są dostępne ich kody źródłowe. Browser jest jednocześnie zintegrowanym edytorem, analizatorem kodu i narzędziem umożliwiającym refactoring kodu o bardzo dużych możliwościach.
Z braku deklaracji typów i reflektywności wynika jeszcze jedna cecha Smalltalka – nie istnieją niepełne definicje klas, ponieważ klasy i metody mogą być kompilowane niezależnie od siebie. Umożliwia to między innymi modyfikacje programu w czasie jego działania, jego jednoczesne testowanie i poprawianie. W razie wystąpienia błędu programista może go poprawić bez konieczności zakończenia pracy programu i ponownego uruchamiania. Poszczególne klasy mogą być implementowane równolegle z innymi, w każdej chwili użyte i rozwijane nawet w czasie pracy aplikacji. W ten sposób w każdym momencie już zaimplementowana funkcjonalność danej klasy może zostać przetestowana. Umożliwia to szybki cykl edycji, kompilowania i debugowania na poziomie kodu źródłowego.
Architektura
Smalltalk pracuje pod kontrolą maszyny wirtualnej – tzn. pod kontrolą abstrakcyjnego komputera, który może zostać zaimplementowany na różnych platformach. Program smalltalkowy jest tłumaczony na język tej wirtualnej maszyny, która alokuje zasoby konkretnego systemu, i dlatego jest on niezależny od platformy docelowej, na której będzie uruchamiany.
Koncepcja wirtualnej maszyny i pełna obiektowość Smalltalka umożliwiają automatyczne zarządzanie pamięcią – obiekty smalltalkowe nie muszą być jawnie usuwane z pamięci po zakończeniu ich pracy. W tym celu maszyna wirtualna posiada tak zwany Garbage Collector, który samodzielnie i efektywnie rozpoznaje, które obiekty nie są już używane i odzyskuje zajmowaną przez nie pamięć.
Historia
Smalltalk został rozwinięty w latach 70. i 80. w laboratoriach firmy Xerox (Xerox Palo Alto Research Center). Język został zaprojektowany tak, aby połączyć dużą czytelność kodu z wszechstronną funkcjonalnością i elastycznością.
Smalltalk był pierwszym konsekwentnie obiektowo zorientowanym językiem i drugim językiem z elementami obiektowymi po języku Simula, dla którego zostały wymyślone podstawowe koncepcje programowania obiektowego. Smalltalk był źródłem koncepcji dla tak dzisiaj oczywistych rozwiązań jak obsługa myszki, systemy okien, interaktywne środowisko programistyczne i technik takich jak np. maszyna wirtualna, które znalazły zastosowanie również w językach Java i C#.
W 1988 roku z firmy Xerox została wydzielona firma Parcplace Systems w celu komercyjnego rozpowszechnienia języka. W 1995 z firm Parcplace Systems i Digitalk powstała firma Parcplace-Digitalk, która w 1997 roku zmieniła nazwę na ObjectShare. W 1999 technologia VisualWorks Smalltalk została zakupiona przez firmę Cincom, która przejęła również całą grupę programistów rozwijających język Smalltalk.
Dla języka Smalltalk powstała i została rozwinięta koncepcja eXtreme Programming.
Przykładowy program
| arraySize anArray |
arraySize := (Prompter prompt: 'Podaj rozmiar tablicy' ) asNumber .
(arraySize < 0) ifTrue: [ 'Rozmiar nie może być ujemny' printString ]
ifFalse:
[ anArray := Array new: arraySize .
1 to: arraySize do: [ :i | anArray at: i put: 1 ] .
anArray printString ]
Program pyta użytkownika o rozmiar tablicy, a następnie wyświetla tablicę o podanej długości, wypełnioną jedynkami.
Najbardziej popularne środowiska Smalltalk
- Ambrai Smalltalk,
- Dolphin Smalltalk
- Gemstone Smalltalk
- Smalltalk/X
- Squeak
- VisualAge for Smalltalk
- VisualSmalltalk Enterprise
- Visual Works
Linki zewnętrzne
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.