Zadanie zaliczeniowe nr 1 
(MSUI-PWiO) 

Napisz w Smalltalku hierarchię klas opisuj±cych Sołnierzy. WyraĽ w tej hierarchii następuj±ce fakty: 

• wszyscy żołnierze s± ludĽmi, 
• każdy szeregowiec, sierżant, porucznik i kapitan jest żołnierzem, 
• oddziały wojskowe dziel± się na kompanie i plutony. 
Stwórz też klasę opisuj±c± kompanię. Tak zaprojektuj klasy by: 

• każdy człowiek znał swoje imię i nazwisko, 
• każdy żołnierz znał swoja kompanię, 
• każdy kapitan znał swoich bezpo¶rednich podwładnych (poruczników), 
• każdy porucznik znał swojego przełożonego (kapitana) i swoich podwładnych (szeregowców), 
• każdy żołnierz znał swojego przełożonego (dla kapitana wpisujemy tu nil), 
• każda kompania składała się z plutonów, 
• każda kompania znała swoje plutony i swojego dowódcę (kapitana) oraz zaopatrzeniowca (sierżanta), 
• każdy pluton znał swoich żołnierzy (dowódcę – porucznika i szeregowców), 
• każdy pluton znał swoj± kompanię, 
• każdy oddział wojskowy miał nazwę. 
Każdy z ludzi musi umieć podać swój opis w postaci napisu (komunikat printString). Opis ma zawierać 
wszystkie informacje, które zna dany człowiek (np. nazwę oddziału, czy nazwisko i stopień przełożonego – o ile 
ma przełożonego). Kompania powinna wypisywać swój opis do okienka Transcript. Opis kompanii to jej nazwa 
opis dowódcy i zaopatrzeniowca oraz opisy poszczególnych plutonów. Opis plutonu oprócz nazwy swojej i 
nazwy swojej kompanii powinien zawierać spis żołnierzy plutonu. Pamiętaj, żeby nie pisać od nowa rzeczy, 
które raz już napisałe¶ i pamiętaj o zasadzie „leniwy ale uczciwy”. 

Napisz fragment programu w Smalltalku, który utworzy kilka (ok. 10) obiektów reprezentuj±cych różnych 
żołnierzy i różne oddziały, umie¶ci wszystkich w jednej kompanii, a następnie wypisze jej opis. Zadbaj o to, by 
tworzenie nowych obiektów było jak najprostsze. 

• Pisanie do okienka Transcript realizuje następuj±ce wyrażenie: Transcript show: <napis>. Przej¶cie do 
nowego wiersza daje metoda cr (okienka Transcript). Napisy można ze sob± ł±czyć operacj± ,. 
Posługiwanie się kolekcj±: 

• OrderedCollection new, daje now± (pust±) kolekcję, 
• k add: x, dodaje na koniec kolekcji k nowy element x, 
• k do: [ :p | <zrób co¶ z p> ], wykonuje czynno¶ć <zrób co¶ z p> dla każdego elementu kolekcji k. Opis 
czynno¶ci to dowolny ci±g instrukcji smalltalkowych porozdzielanych kropkami. Można w nim 
odwoływać się do obiektu p (nie podaj±c dwukropka). Uwaga: zarówno nawiasy [ ] jak i kreska 
pionowa | s± w tym przykładzie potrzebne.