Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.

Podobne prezentacje


Prezentacja na temat: "OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie."— Zapis prezentacji:

1 OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie (przeplecione z analizą, często zależne od konkretnego języka) –programowanie

2 OOPSmalltalk - Licznik, metodologia2 LICZNIK Ma liczyć cokolwiek. Musi umieć zwiększać się, zmniejszać i zerować. ANALIZA Co wie (zna): –wartość (value) –zero (resetValue) Co umie: –zwiększać się(increment) –zmniejszać się(decrement) –zerować się(reset)

3 OOPSmalltalk - Licznik, metodologia3 Count value resetValue increment decrement reset nazwa klasy atrybuty obiektów akcje (metody) WYNIK ANALIZY

4 OOPSmalltalk - Licznik, metodologia4 Licznik heksadecymalny. Pierwsza myśl: specjalizacja licznika. Metodologia Czym różnią się te obiekty, jeśli chodzi o wiedzę –(co wiedzą i znają) - te różnice prowadzą do generalizacji - specjalizacji. Czym różnią się, jeśli chodzi o to, co robią –to też prowadzi do generalizacji- specjalizacji. Różnice w prezentowaniu (przedstawieniu) wartości –tu jest tylko różnica w prezentowaniu wartości, –specjalizacja nie jest potrzebna.

5 OOPSmalltalk - Licznik, metodologia5 Konkluzja: specjalizacja nie jest potrzebna. Count value resetValue increment decrement reset asBase Ale asBase dotyczy tylko liczników liczbowych. asBase - zamienia wartość na napis (string) reprezentacji liczby przy konkretnej podstawie.

6 OOPSmalltalk - Licznik, metodologia6 Ostateczny projekt: Count value resetValue increment decrement reset IntegerCount increment decrement asBase specjalizacja

7 OOPSmalltalk - Licznik, metodologia7 Obiekt atrybuty metody (akcje) Przykłady:3 ‘ala ma kota’ licznik Klasa - wzorzec dla obiektów Klasa też jest obiektem Przykłady: Integer String Count Nowy obiekt powstaje przez wysłanie komunikatu new do klasy, lub jest literałem (3, ‘ala ma kota’) IntegerCount new Obiekt odbiera komunikaty i reaguje na nie wykonując akcje zdefiniowane w odpowiednich metodach. 2 + 3 licznik increment SMALLTALK

8 OOPSmalltalk - Licznik, metodologia8 Object subclass: #Count instanceVariableNames: 'value resetValue ' classVariableNames: '' poolDictionaries: '' ” Count methodsFor: 'initialize-release‘ ” initialize self reset “ Count methodsFor: 'accessing' “ resetValue ^resetValue resetValue: aValue resetValue := aValue. value ^value value: aValue value := aValue. “ Count methodsFor: 'counting' “ decrement " Musi być zaimplementowane w podklasie" increment " Musi być zaimplementowane w podklasie" reset value := resetValue “ Count class methodsFor: 'instance-creation' “ new ^super new initialize

9 OOPSmalltalk - Licznik, metodologia9 Metoda: funkcja opisująca akcje obiektu metoda zeroargumentowa: nazwa treść treść - zmienne tymczasowe i ciąg wyrażeń oddzielonych kropkami metoda jednoargumentowa znak_specjalny argument treść metoda wieloargumentowa nazwa1: argument1 nazwa2: argument2... treść wyrażenie = komunikat odbiorca nazwa_komunikatu_z_argumentami np. x + 3 x wypisz: ekran Count new kolekcja add: x after: y wyrażenie przekazujące wynik z metody: ^wyrażenie

10 OOPSmalltalk - Licznik, metodologia10 Count subclass: #IntegerCount instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' “ IntegerCount methodsFor: 'initialize-release' “ initialize resetValue := 0. super initialize “ IntegerCount methodsFor: 'counting' “ decrement value := value - 1 increment value := value + 1 “ IntegerCount methodsFor: 'converting' “ asBase: aBase ^value radix: aBase ”W ObjectStudio radix: wypisuje z prefiksem oznaczającym podstawę”

11 OOPSmalltalk - Licznik, metodologia11 Charakterystyczne cechy Smalltalku wszystko jest obiektem (chyba, że jest metodą) także klasy są obiektami program = biblioteka klas + obiekty zadeklarowanie nowej klasy oznacza dodanie jej do biblioteki klas - nie ma rozróżnienia pomiędzy klasami “standardowymi” a klasami użytkownika, wszystko można modyfikować brak typów zmiennych wartością zmiennej może być dowolny obiekt. Nie ma żadnej kontroli w czasie kompilacji. Jeśli obiekt nie rozumie komunikatu, jest błąd w czasie wykonania programu

12 OOPSmalltalk - Licznik, metodologia12 Komunikaty unarne (zero parametrów) odbiorca nazwa_komunikatu licznik reset 3 negated ‘abcde’ size 5 factorial binarne (1 parametr) odbiorca znak_specjalny parametr x == 2 1 = 4 2 + 3 ‘abc’, ‘de’ złożone (keyword, wiele parametrów) odbiorca nazwa1: par1 nazwa2: par2... tab at: 1 put: 3 licznik asBase: 8 kaskada (wysłanie wielu komunikatów do tego samego odbiorcy) tab at: 1 put: ‘ala’; at: 2 put: ‘ma’; at: 3 put: ‘asa’

13 OOPSmalltalk - Licznik, metodologia13 Składnia Smalltalku Deklaracja klasy: NazwaNadklasy subclass: #NazwaKlasy instanceVariableNames: ‘zmienna1 zmienna2...’ classVariableNames: ‘Zmienna1 Zmienna2... ‘ poolDictionaries: ‘Pool1 Pool2... ‘ ”W niektórych Smalltalkach występuje jeszcze category: ‘Kategoria’ ” Zmienne egzemplarzowe (indywidualne, obiektowe) atrybuty obiektów, w każdym obiekcie mogą mieć inne wartości Zmienne klasowe atrybuty wspólne dla wszystkich obiektów danej klasy pule (słowniki) pule zmiennych globalnych, wspólne dla obiektów klas, w których są wymienione zmienne globalne (słownik System) wspólne dla wszystkich obiektów Nie ma innych zmiennych globalnych

14 OOPSmalltalk - Licznik, metodologia14 Rodzaje metod: klasowe wykonywane są w klasie, mogą działać na zmiennych globalnych i na zmiennych klasowych kategorie inicjalizacja zmiennych klasowych tworzenie nowych obiektów egzemplarzowe (obiektowe) wykonywane w obiektach, mogą działać na zmiennych egzemplarzowych, klasowych i globalnych kategorie dostęp do atrybutów porównywanie obiektów kopiowanie wyświetlanie inicjalizacja obiektu pomocnicze (prywatne )...

15 OOPSmalltalk - Licznik, metodologia15 Licznik dla znaków ASCII (od 32 do 126) Count value resetValue increment decrement reset IntegerCount increment decrement asBase AsciiCount increment decrement

16 OOPSmalltalk - Licznik, metodologia16 Count subclass: #ASCIICount instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' “ ASCIICount methodsFor: 'initialize-release' “ initialize resetValue := $a. super initialize “ ASCIICount methodsFor: 'counting' “ decrement | newAsciiValue | newAsciiValue := value asInteger <= 32 ifTrue: [126] ifFalse: [value asInteger - 1]. ^self value: (Character value: newAsciiValue) increment | newAsciiValue | newAsciiValue := value asInteger >= 126 ifTrue: [32] ifFalse: [value asInteger + 1]. ^self value: (Character value: newAsciiValue)

17 OOPSmalltalk - Licznik, metodologia17 LISTA Object subclass: #List instanceVariableNames: 'next elem'...... “metody indywidualne” next ^next next: aList next := aList elem ^elem elem: anElement elem := anElement WYGODNIEJ “metody klasowe dla List” createWith: element and: aList ^(self new) elem: element; next: aList “przedefiniowana metoda push” push top := Lista createWith: element and: top

18 OOPSmalltalk - Licznik, metodologia18 STOS Operacje: push: elementzwraca stos popzwraca zdjęty element topElemzwraca element z czubka isEmptyzwraca true lub false newtworzy pusty stos Object subclass: #Stack instanceVariableNames: 'top' classVariableNames: '' poolDictionaries: '' “metody indywidualne” push: element | aux | (aux := Lista new) elem: element ; next: top. top := aux pop | aux | self isEmpty ifTrue: [^self error: ‘pusty stos’]. aux := top. top := top next. ^aux elem isEmpty ^(top isNil) topElem ^top elem

19 OOPSmalltalk - Licznik, metodologia19 Stos elementów tego samego typu Stack subclass: #MonotypeStack instanceVariableNames: 'typeOfElems' classVariableNames: '' poolDictionaries: '' “metody klasowe” new: type ^(super new) typeOfElems: type “metody indywidualne” typeOfElems ^typeOfElems typeOfElems: type typeOfElems := type. ^self push: element (element class == typeOfElems) ifFalse: [^self error: ‘zły typ elementu’] ifTrue: [ ^super push: element ]


Pobierz ppt "OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie."

Podobne prezentacje


Reklamy Google