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 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)

2 OOPSmalltalk - Licznik, metodologia2 Count value resetValue increment decrement reset nazwa klasy atrybuty obiektów akcje (metody) 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. WYNIK ANALIZY

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

4 OOPSmalltalk - Licznik, metodologia4 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

5 OOPSmalltalk - Licznik, metodologia5 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 zwracające wynik z metody: ^wyrażenie

6 OOPSmalltalk - Licznik, metodologia6 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

7 OOPSmalltalk - Licznik, metodologia7 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

8 OOPSmalltalk - Licznik, metodologia8 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

9 OOPSmalltalk - Licznik, metodologia9 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

10 OOPSmalltalk - Licznik, metodologia10 Składnia Smalltalku Deklaracja klasy: NazwaNadklasy subclass: #NazwaKlasy instanceVariableNames: zmienna1 zmienna2... classVariableNames: Zmienna1 Zmienna2... poolDictionaries: Pool1 Pool2... category: Kategoria Zmienne indywidualne (instancyjne) 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 Smalltalk) wspólne dla wszystkich obiektów Nie ma innych zmiennych globalnych

11 OOPSmalltalk - Licznik, metodologia11 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 indywidualne (instancyjne) wykonywane w obiektach, mogą działać na zmiennych indywidualnych, klasowych i globalnych kategorie dostęp do atrybutów porównywanie obiektów kopiowanie wyświetlanie inicjalizacja obiektu pomocnicze (prywatne )...

12 OOPSmalltalk - Licznik, metodologia12 Licznik dla znaków ASCII (od 33 do 126) Count value resetValue increment decrement reset IntegerCount increment decrement asBase AsciiCount increment decrement

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

14 OOPSmalltalk - Licznik, metodologia14 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

15 OOPSmalltalk - Licznik, metodologia15 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

16 OOPSmalltalk - Licznik, metodologia16 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