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

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
Programowanie obiektowe
Związki w UML.
Standardowa biblioteka języka C++
Programowanie obiektowe
Wzorce.
Static, const, volatile.
Generics w .NET 2.0 Łukasz Rzeszot.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
Kamil Łącki Dominik Strzelichowski
Elementarne struktury danych Piotr Prokopowicz
Szablony (wzorce) Przykład 1: Szablon klasy -
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.
OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Stałe liczby (Integer, Float, Fraction) e-3 4/7 znaki (Character) $a$$$#$. napisy.
OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.
Przykład - Debugger Język pewnego procesora zawiera następujące instrukcje: MOV l, r l:=r ADD l, r l := l + r SUB l, r l := l - r JMP instr skok.
Licznik template<class Count_Type> class Count { public:
Internet Communication Engine
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Obiektowe metody projektowania systemów Command Pattern.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Typy pochodne 1 Często dogodnie jest wprowadzić nowy typ, który jest podobny do istniejącego, niemniej jednak różny. Niech T będzie pewnym typem. Możemy.
Wykład 8 Wojciech Pieprzyca
Programowanie obiektowe. Obiekty. Metody. Właściwości.
Wykład 2 struktura programu elementy języka typy zmienne
Języki programowania obiektowego
Analiza kosztu zamortyzowanego
Podprogramy.
Projektowanie dynamiki - diagramy interakcji
Podstawy C# Grupa .NET PO.
Podstawy programowania
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Programowanie obiektowe III rok EiT
Programowanie obiektowe – zastosowanie języka Java SE
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
JAVA.
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
Programowanie w języku C++
Projektowanie stron WWW
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
Obiekty DOM.
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Programowanie Zaawansowane
Partnerstwo dla Przyszłości 1 Lekcja 27 Klasy i obiekty.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Smalltalk architektura Model-View-Controller obiektowo zorientowany graficzny interfejs użytkownika Cezary BOŁDAK.
Typy wyliczeniowe, kolekcje
Kurs języka C++ – wykład 3 ( )
Programowanie Obiektowe – Wykład 5
Klasy, pola, obiekty, metody. Modyfikatory dostępu, hermetyzacja
(według:
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Object vs. class (rozdzial 13 The NEURON book)
Zapis prezentacji:

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

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)

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

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.

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.

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

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 licznik increment SMALLTALK

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

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

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ę”

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

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 = ‘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’

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

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

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

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)

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

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

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 ]