OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody.

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

Katarzyna Szafrańska kl. II ti
Język C/C++ Funkcje.
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Jarosław Kuchta Dokumentacja i Jakość Oprogramowania
Wprowadzenie do języka skryptowego PHP
Wprowadzenie do języka skryptowego PHP – cz. 2
Programowanie w środowisku sieciowym
Języki programowania C++
OBJECT PASCAL Marzena Szałas.
Kolekcje Collection Bag SequenceableCollection ArrayedCollection Array
Uzupełnienie W OS zmienne indeksowane są utożsamiane ze zwykłymi, więc przykład z MonitoredArray trzeba by przerobić przeliczając indeksy o 1.
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.
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 3: Podstawowe elementy języka.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Typy standardowe Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia.
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.
Tablice jednowymiarowe 1
Wykład 2 struktura programu elementy języka typy zmienne
Wyrażenia Wyrażenie w Fortranie jest poprawną syntaktycznie kombinacją zmiennych, stałych, operatorów i funkcji. Wyrażenia są jednozdaniowymi przepisami.
Instrukcja skoku GO TO etykieta Np. GO TO 100 ….. 100WRITE (*,*) Przeskok do instrukcji 100 Uwaga! NIE WOLNO skakać do wnętrzna złożonych instrukcji warunkowych.
dr Anna Kwiatkowska Instytut Informatyki
Wprowadzenie do programowania w języku Turbo Pascal
gdzie A dowolne wyrażenie logiczne ; x negacja x Tablice Karnaugha Minimalizacja A x+ A x=A gdzie A dowolne wyrażenie logiczne ;
Semafory.
Podprogramy.
Projektowanie dynamiki - diagramy interakcji
Język SQL (Structured Query Language) DDL (Data Definition Language)
nowe operatory & . (kropka) * operator rzutowy -> , (przecinek)
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Słowa kluczowe oraz nazwy obiektów i klas rozpoczynaj od dużej litery np. Loop, Dim, FileStream Rozpoczynaj nazwę zmiennej od małej litery stosując styl.
Podstawy C# Grupa .NET PO.
Podstawy programowania
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Turbo Pascal Turbo Pascal - jedna z popularniejszych implementacji kompilatorów języka PASCAL, zintegrowane srodowisko programistyczne, produkt firmy Borland.
A ctive S erver P ages Technologia dostępu do danych.
Informatyka I Wykład 4 Stałe Stałe liczbowe Stałe znakowe Stałe tekstowe Jerzy Kotowski Politechnika Wroclawska var = 5L - 0xA; -5.
Inicjalizacja i sprzątanie
Jerzy Kotowski Politechnika Wrocławska
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Programowanie baz danych
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Visual Basic for Applications Poziom podstawowy Zajęcia 2
Kurs języka C++ – wykład 9 ( )
Projektowanie stron WWW
Podstawy języka Instrukcje - wprowadzenie
J A V A S C R I P T Obiekty Opracowała: Anna Śmigielska.
Zmienne i typy danych w C#
Obiekty DOM.
OOPSmalltalk - Licznik, metodologia1 Analiza i projektowanie obiektowe 3 fazy: –analiza problemu - modelowanie (m.in. podział na klasy) –projektowanie.
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Wykład 5 Informatyka MPDI 3 semestr Język JavaScript.
Dominik Benduski Michał Mandecki Podstawy Visual Basic w Excelu.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
 Formuła to wyrażenie algebraiczne (wzór) określające jakie operacje ma wykonać program na danych. Może ona zawierać liczby, łańcuchy znaków, funkcje,
Podstawowe konstrukcje języka Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin.
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
(według:
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Dane, zmienne, instrukcje
PGO Porównywanie obiektów
Zapis prezentacji:

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące1 Komunikaty do self Odbiorcą jest obiekt, w którym wykonuje się ten komunikat Szukanie metody rozpoczyna się od klasy obiektu, w którym wykonuje się ten komunikat (a nie od klasy, w której występuje tekstowo ten komunikat). Jest to wiązanie dynamiczne, a nie statyczne. Object subclass: #One Metody egzemplarzowe test ^1 result1 ^ self test One sublcass: #Two Metody egzemplarzowe test ^2 x1 := One new. x2 := Two new. x1 test1 x1 result11 x2 test2 x2 result12

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące2 Komunikaty do super Odbiorcą jest obiekt wyznaczony przez self. szukanie metody rozpoczyna się od nadklasy, w której występuje tekstowo ten komunikat. Jest to wiązanie statyczne, a nie dynamiczne. Two subclass: #Three.... metody egzemplarzowe result2 ^self result1 result3 ^super test Three subclass: #Four metody egzemplarzowe test ^4 x3 := Three new. x4 := Four new. x3 test2 x4 result14 x3 result22 x4 result24 x3 result32 x4 result32

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące3 Identyfikatory ciągi liter, cyfr (i znaków podkreślenia), zaczynające się od litery (lub podkreślenia), konwencja: nie używa się podkreśleń, rozróżniane są wielkie i małe litery, niektóre implementacje akceptują polskie znaki (np. OS), nie ma ograniczenia na długość, konwencja : –z małej litery zaczynają się identyfikatory: zmiennych lokalnych, zmiennych egzemplarzowych, metod egzemplarzowych, –z wielkiej litery zaczynają się identyfikatory: klas, zmiennych klasowych, metod klasowych, zmiennych globalnych,

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące4 Literały liczby (Number: Integer, Float, Fraction, Decimal, …) r11 Integer (SmallInteger) Integer (LongInteger) 1.3d (Decimal (BCD) OS) e-3 Float 4/7 Fraction znaki (Character) $a $$ $# $. napisy (String) Ala ma kotaAdams symbole (Symbol) #Licznik #symbol #+ #value: tablice #(5 3 $a def)

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące5 Podstawowe klasy Object Boolean False True Collection IndexedCollection Array String Symbol Set Magnitude Character Date Number Float Fraction Integer Time UndefinedObject true - jedyny obiekt klasy True false - jedyny obiekt klasy False odpowiadają na komunikaty: & and:or:| ifFalse: ifTrue:ifTrue:ifFalse:ifFalse:ifTrue nil - jedyny obiekt klasy UndefinedObject

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące6 Magnitude Na obiektach tej klasy jest określony porządek liniowy >= Uwaga: =, ==, ~=, ~ (czyli równości i różności) są odziedziczone z klasy Object. W podklasie Range nie ma =. Number Na obiektach tej klasy są określone operacje arytmetyczne. +-*/ // aNumberiloraz całkowity odbiorcy przez aNumber \\ aNumberreszta całkowita abswartość bezwzględna odbiorcy negatednegacja odbiorcy (-k nie jest poprawne w wielu Smalltalkach: OS OK, Dolphin nie) sinsinus odbiorcy coscosinus odbiorcy Float Liczby rzeczywiste reprezentowane zmiennopozycyjnie. Fraction Ułamki nieupraszczalne Integer Klasa liczb całkowitych. Ma podklasy: SmallInteger – małe liczby całkowite (w OS 16-bitowe) LongInteger – duże liczby całkowite (w OS 32-bitowe) factorialdaje silnię odbiorcy (Integer) gcd: anIntegerdaje największy wspólny dzielnik (Number ale musi mieć całkowitą wartość) lcm: anIntegerdaje najmniejszą wspólną wielokrotność (Integer)

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące7 Bloki Bloki są obiektami klasy BlockContext. Bloki to anonimowe funkcje (czyli kawałki kodu). [ :par1 :par2... | S1. S Sk ] Bloki nie są wykonywane od razu po napotkaniu w tekście metody. Tworzony jest wtedy obiekt klasy BlockContext. Można wykonać treść bloku wysyłając do utworzonego tak obiektu komunikat value (value:, value:value:, …). Komunikat value daje jako wynik wartość ostatniego wyrażenia wykonanego w bloku. aBlock value: wyr1 value: wyr2 [ i := i + 1] value [:x :y | (x + y * 3 ] value: 2 value: 5 blk := [ : par | total := total + par ] total := 0. blk value: 10. blk value: 1. blk value: 3.total = 14 Blok można przekazać jako parametr komunikatu. x wykonaj: [ ]wykonaj: aBlock aBlock value

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące8 Powrót z bloku – ^ Wystąpienie ^Expr w bloku jest powrotem z metody, w której blok występuje (tekstowo !), a więc kończy wykonanie tej metody (a nie metody, która wywołała ten blok). Przykłady: isPrime | candidate divisor | candidate := self. candidate <= 0 ifTrue: [^false]. candidate >= 1 & (candidate <= 3) ifTrue: [^true]. (candidate \\ 2) = 0 ifTrue: [^false]. divisor := 3. [ divisor * divisor <= candidate ] whileTrue: [ (candidate \\ divisor) = 0 ifTrue: [^false] ifFalse: [divisor := divisor + 2] ] ^true Użycie bloków do obsługi sytuacji wyjątkowych: set := Set new. set add: 3; add: 5; add: 7; add: set remove: 3 ifAbsent: [ nie ma obiektu! out. ^self]. set remove: 10 ifAbsent: [ nie ma obiektu! out. ^self].

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące9 Instrukcje warunkowe wyrWarunkowe ifTrue: [ blok1 ] wyrWarunkowe ifFalse: [blok1] wyrWarunkowe ifFalse: [blok1] ifTrue: [blok2] wyrWarunkowe ifTrue: [blok1] ifFalse: [blok2] Wyrażenie warunkowe musi być obiektem klasy True lub False. x < 3 ifTrue: [ x := 0]. liczba1 < liczba2 ifTrue: [ max := liczba2. min := liczba1] ifFalse: [max := liczba1. min := liczba2] Treść metod warunkowych W klasie True: ifFalse: aBlock ^nil ifTrue: aBlock ^ aBlock value ifTrue: trueBlock ifFalse: falseBlock ^ trueBlock value ifFalse: falseBlock ifTrue: trueBlock ^ trueBlock value

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące10 Pętle [ blok warunkowy ] whileTrue: [ blok pętli ] [ blok warunkowy ] whileFalse: [ blok pętli ] Blok warunkowy powinien być blokiem bezparametrowym takim, że wysłany do niego komunikat value zwraca true lub false. Komunikaty whileTrue: i whileFalse: są rozumiane przez bloki. suma := 0. liczba := 4. [ liczba <= 100 ] whileTrue: [ suma := suma + liczba. liczba := liczba + 1] napis := abcdef345. i := 1. [ (napis at: i) out. (napis at: i ) ~~$3 ] whileTrue: [ i := i + 1] Możliwa treść metody whileTrue: w klasie BlockContext whileTrue: aBlock self value ifTrue: [ aBlock value. self whileTrue: aBlock ] ^ nil

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące11 liczba timesRepeat: [ blok ] suma := 0. i := 0. 5 timesRepeat: [ i := i + 1. suma := suma + i ] timesRepeat: aBlock | anInteger | anInteger := self. [ anInteger > 0 ] whileTrue: [ anInteger := anInteger - 1. aBlock value ] Pętle liczbowe Odpowiednie metody są zdefiniowane w klasie Number lub Integer. liczba to: final by: step do: aBlock liczba to: final do: aBlock 1 to: 10 by: 2 do: [ :i | tab at: i put: 0 ] zeruje co drugi element tablicy tab Możliwa realizacja: to: final by: step do: aBlock | index | index := self. step > 0 ifTrue: [ [ index <= final ] whileTrue: [ aBlock value: index. index := index + step] ] ifFalse:......

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące12 Klasa Object Najważniejsze metody: =porównanie obiektów. Zwykle przedefiniowane w podklasach (czy obiekty są takie same) = =porównanie obiektów (czy to jest ten sam obiekt) ~ =, ~~różność obiektów classzwraca klasę obiektu isKindOf: aClassczy to jest obiekt tej klasy lub jej podklasy isMemberOf: aClassczy to jest obiekt tej klasy copykopia obiektu (tzw. powierzchowna) shallowCopyj. w. deepCopykopia głęboka, z powierzchowną kopią atrybutów implementedBySubclasssygnalizacja (dla klasy abstrakcyjnej), że ta metoda nie może tu być zaimplementowana inspectwłącza okno oglądania obiektu isNil, notNilczy obiekt jest równy nil (nie jest) perform: aSymbolwysyła komunikat bezparametrowy aSymbol do odbiorcy komunikatu perform:. Wynikiem jest wynik wysłanego komunikatu perform: aSymbol with: anObjectj.w., anObject jest parametrem komunikatu aSymbol perform: aSymbol withArguments: anArray j.w., anArray jest tablicą parametrów komunikatu aSymbol

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące13 metody klasy Object - c.d. error: aString wypisuje odpowiedni komunikat o błędzie i zatrzymuje program haltzatrzymuje program printOn: aStream wypisuje na strumień aStream tekstową reprezentację obiektu. Standardowo pisze tylko informację o klasie obiektu, powinna być przedefiniowana w poszczególnych klasach (np. Number, String, Date ) printStringdaje napis będący tekstową reprezentacją obiektu; powinna być przedefiniowana w podklasach yourselfdaje obiekt odbiorcy doesNotUnderstand: aMessage args: args generuje komunikat o błędzie - niezrozumiały komunikat aMessage

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące14 Klasy i metaklasy Object Behavior Class Metaclass Klasa Class reprezentuje wszystkie klasy. Metaklasy są to klasy klas. Tworzą dokładnie taką samą hierarchię, jak klasy. Każdej klasie (np. Number, Object) odpowiada metaklasa o tej samej nazwie (odp. Number, Object). Klasa jest jedynym obiektem swojej metaklasy. Każda metaklasa jest obiektem klasy Metaclass. Klasa Metaclass jest swoim własnym obiektem. Zmienne indywidualne i metody indywidualne metaklasy (zaimplementowane w klasie Class jako egzemplarzowe) są zmiennymi klasowymi i metodami klasowymi każdego obiektu (czyli jakby klasy Object). Klasy Behavior i Class definiują protokoły wspólne dla wszystkich klas. W klasie Behavior: newtworzy nowy obiekt new: sizetworzy nowy obiekt ze zmiennymi indeksowanymi namedaje nazwę odbiorcy (czyli nazwę klasy) w klasie Class: subclass: aSymbol instanceVariableNames: string1 classVariableNames: string2 poolDictionaries: pool tworzenie nowej klasy, czyli nowego obiektu odp. metaklasy

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące15 Refleksja Możliwość odwoływania się podczas wykonywania programu do samego programu. Można na przykład dowiedzieć się o: anObjcet class klasę obiektu anObject class name nazwę klasy obiektu anObject class canUnderstad: #metoda czy obiekt rozumie komunikat anObject class allSelectors jakie komunikaty rozumie obiekt aClass subclasses jakie podklasy ma wskazana klasa aClass allInstances jakie są wszystkie obiekty (dokładnie) tej klasy

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące16 Dynamiczne generowanie klas "Tworzymy dynamicznie nową klasę" Object subclass: #Test instanceVariableNames: 'a b c' classVariableNames: '' poolDictionaries: ''. "Dodajemy do niej metody" Test compileMethodSource: 'pokaz ''Udało się!'' out'. "I upewniamy się, że się udało" |a| a := Test new. "tworzy obiekt klasy Test" a pokaz. "wypisuje tekst do Transcriptu" a class canUnderstand: #pokaz. "true"

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące17 Obiekty ze zmiennymi indeksowanymi (nie w OS) 1. Zwykła klasa - obiekty mają tylko zwykłe (nazwane) zmienne indywidualne. Number subclass: Fraction instanceVariableNames: numerator denominator classVariableNames: poolDictionaries: category: Numeric 2. Klasa, której obiekty, oprócz nazwanych zmiennych indywidualnych, mają zmienne indeksowane. Ich liczba jest określona w momencie tworzenia obiektu (new: size). FixedSizeCollection variableSubclass: Array instanceVariableNames: classVariableNames: poolDictionaries: category: Array Objet variableSubclass: Stack instanceVariableNames: top classVariableNames: Klasa, której obiekty mają wyłącznie indeksowane zmienne indywidualne (bajty). Rozmiar obiektów jest określany przy ich tworzeniu (new: size) FixedSizeCollection variableByteSubclass: String classVariableNames: poolDictionaries: CharacterConstants category: String

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące18 Metody (z klasy Object i Behavior), które są odbierane przez klasy i obiekty ze zmiennymi indeksowanymi: new: aNumbertworzy nowy obiekt, który ma aNumber zmiennych indeksowanych. błąd, jeśli klasa nie ma zmiennych indeksowanych. tab := Array new: 10 at: anIntegerzwraca obiekt, który znajduje się na pozycji anInteger w odbiorcy. Błąd, jeśli obiekt nie ma zmiennych indeksowanych lub anInteger przekracza ich liczbę. y := tab at: 3 at: anInteger put: anObjectwstawia obiekt anObject na pozycję anInteger odbiorcy. Błąd j.w. tab at: 2 put: test. tab at: 3 put: 0 basicAt: anIntegerjak at:, nie jest przedefiniowane w podklasach basicAt: anInt put: anObjak at: put:, nie jest przedefiniowane w podklasach sizezwraca liczbę indeksowanych zmiennych tab size = 10 true basicSizejak size, nie jest przedefiniowane w podklasach

OOPSmalltalk - stałe, klasy, bloki, instrukcje sterujące19 Przykład - MonitoredArray Chcemy zdefiniować nową klasę pozwalającą na badanie częstości dostępu do elementów tablicy. Klasa MonitoredArray będzie podklasą klasy Array. Musimy przedefiniować metodę at: tak, aby zliczała dostęp do elementów tablicy. Klasa MonitoredArray może zastąpić klasę Array w każdej aplikacji. Array subclass: #MonitoredArray instanceVariableNames: liczniki classVariableNames: poolDictionaries: Metody klasowe new: anInteger ^(super new: anInteger) initialize Metody indywidualne initialize Tworzy równoległą tablicę liczniki | size | size := self size. liczniki := Array new: size. 1 to: size do: [ :i | liczniki at: i put: 0 ] at: i liczniki at: i put: ((liczniki at: i) + 1). ^super at: i licznikiDostepu ^liczniki