Microsoft Word - Smalltalk.doc

Līdzīgi dokumenti
Red button

Rīgas Tehniskā universitāte Apstiprinu: Studiju prorektors Uldis Sukovskis Rīga, Programmēšanas valoda JavaScript - Rīga Neformālās izglītī

KURSA KODS

1

Microsoft Word - du_5_2005.doc

2.2/20 IEGULDĪJUMS TAVĀ NĀKOTNĒ! Eiropas Reģionālās attīstības fonds Prioritāte: 2.1. Zinātne un inovācijas Pasākums: Zinātne, pētniecība un at

LU 68 Fizikas sekcija DocBook

Mūsu programmas Programmu ilgums 1 semestris 15 nodarbības 1,5 h nodarbības ilgums

Imants Gorbāns. E-kursa satura rādītāja izveide IEGULDĪJUMS TAVĀ NĀKOTNĒ Imants Gorbāns E-kursa satura rādītāja izveide Materiāls izstrādāts ESF Darbī

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Maǧistra studiju

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

Speckurss materiālu pretestībā 3. lekcija

Nolikums Silava_2010_1_AK

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

latvijas-elektronisko-publikaciju-krajuma-attistibas-vadlinijas

Microsoft Word - 240_NOT_IPP_SAGAT

LV IEVĒRO: VISAS LAPASPUŠU NORĀDES ATTIECAS UZ SPĒLES KOMPLEKTĀ IEKĻAUTO SPĒLES NOTEIKUMU GRĀMATIŅU. SPĒLES KOMPLEKTS: 12 pentamino, 5 sarkani klucīši

Microsoft Word - JURI_CM_2010_452778_LV.doc

DATORMĀCĪBA

KURSA KODS

APSTIPRINĀTS

32repol_uzd

Microsoft Word - Papildmaterials.doc

Sporta attistibas koncepcija

Tehniskās prasības darbam ar VISMA Horizon un HoP Aktualizēts

(Microsoft Word - LV_2010_FIN_vad\356bas zi\362ojums.doc)

Kas mums izdodas un ko darīsim tālāk?

Microsoft Word - A MSWORD

Microsoft Word pienemtielemumi.doc

Nolikums

G.Plivna-sistemanalize

RietumuAPI_PSD2_v1_LV

LATVIJAS REPUBLIKA RIEBIĥU NOVADA DOME Reăistrācijas Nr Saules iela 8, RiebiĦi, RiebiĦu novads, LV-5326 ĀRKĀRTAS SĒDES PROTOKOLS RiebiĦu

Microsoft Word - ZinojumsLV2015_2.doc

OWASP Top 10 Latvijā Biežākās drošības problēmas 4mekļa lietojumos Agris Krusts, IT Centrs, SIA

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

EIROPAS KOMISIJA INFORMĀTIKAS ĢENERĀLDIREKTORĀTS WiFi4EU politikas īstenošanas komponents Piemērošanas rokasgrāmata v1.0 Saturs 1. Ievads Pārl

Komandu sacensības informātikā un matemātikā Cēsis 2017 Izteiksmes Fināla uzdevumi Aplūkosim aritmētiskas izteiksmes, kurās tiek izmantoti deviņi atšķ

Pārskatu aizpildīšana

IEGULDĪJUMS TAVĀ NĀKOTNĒ Projekts Nr. 2009/0216/1DP/ /09/APIA/VIAA/044 NESTRIKTAS KOPAS AR VĒRTĪBĀM PUSGREDZENĀ UN MONĀDES PĀR KATEGORIJU Jāni

EB75.2 Report Financial Crisis III_LV

Microsoft Word - VacuValodaBFa003.doc

2012 Komandu olimpiāde Atvērtā Kopa Atrisinājumi 10. klasei 1. Tā kā LM ir viduslīnija, tad, balstoties uz viduslīnijas īpašībām, trijstūra 1 laukums

Pētījums Nr Datu avotu analīzes un sasaistes rīks Līgums Nr. L-KC Testēšanas rezultātu apraksts Vadošais pētnieks Zinātniskā virziena v

Izziòa

NewFeaturesAxisVM X5-LVcKK.pages

Oracle SQL teikuma izpildes plāns (execution plan)

Precizēts_Gaujiena_Anniņas_Nolikums

Microsoft Word - B MSWORD

Datorzinātņu doktorantūras zinātniskais seminārs Atrašanās vietas inteliģences metodes datu noliktavu mobilai lietotnei 1.k.doktorante: Daiga Plase Da

Microsoft Word - kn817p3.doc

ESF projekts Pedagogu konkurētspējas veicināšana izglītības sistēmas optimizācijas apstākļos Vienošanās Nr.2009/0196/1DP/ /09/IPIA/VIAA/001 Pr

Ldz vpn INSTRUKCIJA WINDOWS LIETOTĀJIEM.

VISMA Horizon 535. versijas apraksts Galvenās izmaiņas un uzlabojumi 535. versijā: Sistēma Lietotāju pārvaldība Horizon lietotāja dati Lietotāju sarak

Slide 1

Microsoft Word - kn17p1.doc

CEĻVEDIS PIRCĒJIEM DELAKTIG Sēdmēbeļu kolekcija DIZAINS Toms Diksons (Tom Dixon) DAĻAS Atpūtas krēsls divvietīgs modulis trīsvietīgs modulis Atzveltne

Nintex Workflow 2010 instalēšanas ceļvedis Instalēšanas ceļvedis Nintex USA LLC 2012, visas tiesības paturētas. Kļūdas un izlaidumi novērsti.

Pamatelementi statistikā un Hipotēžu pārbaude

Ūsas Autors nezināms Andras Otto ilustrācijas Kaķis savas ūsas izmanto, lai mērītu telpu vai attālumu. Tas ir sevišķi svarīgi, ja viņš mēģina ielīst š

skaitampuzle instrukcija

Pamatnostādnes Par pozīciju aprēķināšanu, ko saskaņā ar EMIR veic darījumu reģistri 28/03/2019 ESMA LV

IRM in Audit

DAUGAVPILS UNIVERSITĀTE MATEMĀTISKĀS ANALĪZES KATEDRA Armands Gricāns Vjačeslavs Starcevs Lebega mērs un integrālis (individuālie uzdevumi) 2002

UPDK _2_c

PowerPoint Presentation

DAUGAVPILS UNIVERSITĀTE Matemātikas katedra Vjačeslavs Starcevs MATEMĀTISKĀS ANALĪZES SĀKUMU ZINĀTNISKIE PAMATI (izvēles tēmas) 2008

II Aarhus report_Latvia_LV_

PROJEKTĒTĀJS: SIA CK Būvkomersanta reăistrācijas Nr R Reăistrācijas Nr Jur.adrese: Jaunliepas, Vaidavas pagasts, Kocēnu novads, LV-

PowerPoint Presentation

Gipsa_Fabrika_APVIENOTAIS_PP+Cookies

Norādījumi par kopējo aktīvu un kopējās riska pozīcijas veidņu aizpildīšanu maksu noteicošo faktoru informācijas apkopošanai

PowerPoint Presentation

klase gada 1. kārtas uzdevumi 3 punktu uzdevumi: Sabiedriskais transports Ielaušanās Medus kāre Zivis Robots 4 punktu uzdevumi: Bebru ka

EB Special PE - Crise II - LV

Logopedija_2007

Citadele Index Latvijas uzħēmēju aptaujas rezultāti gada jūnijs Tirgus un sabiedriskās domas pētījumu centrs

Microsoft PowerPoint - 2_sem_10_Rauhvargers_LO nepiec_2013.pptx

Istockphoto.com / WWF-Canada Kas ir Zaļais birojs? WWF Zaļais birojs ir praktiska vides pārvaldības sistēma birojiem. Ar tās palīdzību Jūs varat ietau

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

Apstiprināts Latvijas farmaceitu biedrības valdes gada 30. maija sēdē, prot. Nr. 17 Ar grozījumiem līdz LFB valdes sēdei gada 18. oktobrī,

Prezentacija

(Microsoft Word - PROTOKOLS Nr.7-m\342jas lapai.doc)

Komandu olimpiāde Bermudu trijstūris Katru uzdevumu vērtē ar 0 5 punktiem. Risināšanas laiks - 3 astronomiskās stundas Uzdevumi 7. klasei 1. Doti 5 sk

Instrukcija par semināru Seminārs ir e-studiju aktivitāšu modulis, kas ir līdzīgs uzdevuma modulim, kurā studenti var iesniegt savus darbus. Tikai sem

1

Saturs Sākums Beigas Atpakaļ Aizvērt Pilns ekrāns 1 DAUGAVPILS UNIVERSITĀTE Dabaszinātņu un matemātikas fakultāte Matemātikas katedra Bakalaura studij

TEHNISKĀ SPECIFIKĀCIJA Endoskopijas kabineta aprīkojumam jābūt jaunam, ražotam 2018.gadā, kurš savienojams ar slimnīcā esošo videoendoskopu GIF-Q165 u

Microsoft Word - Ti-085 Atskaite Nr 9_1.docx

Kārtības 2. pielikums "Latvijas Bankas elektroniskās klīringa sistēmas (EKS) funkcionālais apraksts"

WEB izstrāde IEPIRKUMS (iepirkuma identifikācijas Nr. 6-8/A-39) Pasūtītājs: Nosaukums: Biedrība Latvijas Elektrotehnikas un elektronikas rūpniecības a

Social Activities and Practices Institute 1 Victor Grigorovich Street, Sofia 1606, Bulgaria Phone: Kas ir

(Microsoft Word - Skolas pa\360nov\347rt\347juma zi\362ojums doc)

Pamatnostādnes Pamatnostādnes par stresa testa scenārijiem atbilstoši NTF regulas 28. pantam 21/03/2018 ESMA LV

Transkripts:

Latvijas Universitātes Fizikas un Matemātikas fakultātes DatorzinātĦu nodaĝa Programmēšanas valoda Smalltalk Referāts lekciju kursā Programmēšanas valodas Natālija Molotkova Stud. apl. nr. DatZ030079 Rīga, 2007

Satura rādītājs Ievads... 3 Vēsture... 3 Objektorientētā programmēšana... 4 Smalltalk principi... 4 Smalltalk pamatidejas... 4 Uz attēliem bāzētā nemainība (image-based persistence)... 5 Pieejas līmeħi... 5 Smalltalk struktūra... 6 Sintakse... 6 LiterāĜi... 6 Mainīgo deklarēšana... 7 Piešėiršana... 7 ZiĦojumi... 7 Izteiksmes... 8 Koda bloki... 9 Kontroles struktūras... 10 Klases... 10 Metodes... 11 Piemēri... 11 Vienkāršs piemērs Hello, world!... 11 Smalltalk klases piemērs... 11 Izmantotā literatūra... 14 2

Ievads Smalltalk ir objektorientēta programmēšanas valoda ar dinamisko tipizāciju, kuru izstrādāja Alans Kejs, Dens Ingallass, Teds Keglers, Adela Goldberga un citi pētnieciskajā centrā Xerox PARC 1970. gados. Valoda tika stādīta priekšā kā Smalltalk-80 un kopš tā laika tiek plaši pielietota. Smalltalk turpina aktīvi attīstīties un pulcēt ap sevi uzticamu lietotāju sabiedrību. Smalltalk ietekmēja daudzu citu programmēšanas valodu attīstību, piemēram, Objective-C, Actor, Java un Ruby. Daudzas 1980. un 1990. gadu idejas programmu izstrādē parādījās Smalltalk sabiedrībā. Tām var pieskaitīt refaktoringu, projektēšanas šablonus, Klase-Pienākumi-Mijiedarbība kartes un ekstrēmo programmēšanu kopumā. Wiki Wiki koncepcijas dibinātājs Vards Kanningems arī darbojas Smalltalk sabiedrībā. Tagad ar vārdu Smalltalk visbiežāk apzīmē programmēšanas valodu Smalltalk-80. Vēsture Smalltalk izveidoja pētnieku grupu ar Alanu Keju priekšgalā pētnieciskajā centrā Xerox PARC. Pirmā šīs programmēšanas valodas realizācija ir pazīstama kā Smalltalk-71, kuras pamatā bija pārħemta no Simula ideja par ziħojumu apmaiħu. Nedaudz vēlāka versija, kura tika izmantota pētnieciskajam darbam, bija Smalltalk-72. Tās sintakse un izpildes modelis tik atšėīrās no mūsdienu Smalltalk, ka to var uzskatīt par atsevišėu valodu. Pēc būtiskas pārstrādes, kuras laikā tika noteiktas vairākas semantikas izpildes puses efektivitātes paaugstināšanai, tika izveidota versija, kas ir pazīstama kā Smalltalk-76. Šai versijai tika pievienota mantošana, tuvāka Smalltalk-80 sintakse un izstrādes vide, kas ietver sevī lielāko daĝu rīku, kurus pazīst Smalltalk izstrādātāji šobrīd. Smalltalk-80 tika pievienotas metaklases. Smalltalk-80 bija pirmā versija, kas kĝuva pieejama ārpus PARC. Sākumā Smalltalk pirmā versija tika izdalīta nelielam skaitam kompāniju un universitāšu ekspertu novērtējumam. Vēlāk, 1983. gadā, visiem pieejama realizācija, kas ir pazīstama kā Smalltalk-80 otrā versija, parādījās kā neatkarīgs no platformas fails, kas saturēja objektus un virtuālo mašīnu specifikācijas. Šobrīd ir pieejamas divas Smalltalk realizācijas, kas ir tieši Smalltalk-80 pēcnācēji. Tās ir Squeak un VisualWorks. Smalltalk-80 otrā versija ir palaista uz Hobbes, virtuālās mašīnas ST-80, kura ir realizēta uz VisualWorks. 3

Objektorientētā programmēšana Programmēšanas valoda ir objektorientēta, ja tā atbalsta četras objektu īpašības: abstrakciju, polimorfismu, mantošanu un iekapsulēšanu. Datu abstrakcija Datu abstrakcija ir tāda programmēšanas metodoloăija, kas paredz aprakstīt programmu neatkarīgi no datu tipu veidiem kā datu tipu kopumu, izmantojot tikai operāciju terminus. Polimorfisms Polimorfisms Ĝauj diviem vai vairākiem objektiem atbildēt uz vienu un to pašu ziħojumu. Mantošana Mantošana Ĝauj klasei uzvesties tāpat kā kāda cita klase un pielāgot tās uzvedību, lai nodrošinātu noteiktas darbības. Piemēram, mums ir divas klases Absolvents un Pēdējā kursa students Iekapsulēšana Datu struktūru un atsevišėu funkciju apvienošana vienā objektā, lai novērstu nevēlamus blakusefektus sistēmas darbībā. Izmantojot iekapsulēšanu, lielas objektorientētās programmas kĝūst labāk lasāmas, jo visi dati un ar tiem saistīti kodi ir atrodami vienā vietā. Smalltalk principi Smalltalk pamatidejas Smalltalk pamatidejas ir: Viss ir objekti. Rindas, veselie skaitĝi, klašu definīcijas, koda bloki, steki, atmiħa viss tiek attēlots objektu veidā. Programmas izpilde sastāv no ziħojumu sūtīšanas starp objektiem. Jebkurš ziħojums var tikt nosūtīts jebkuram objektam. ObjektssaĦēmējs nosaka, vai ziħojums ir pareizs un kas ir jāizdara, lai to apstrādātu. Viss ir pieejams izmaiħām. Ja ir nepieciešams izmainīt integrēto izstrādes vidi, tad to var izdarīt strādājošā sistēmā, bez pārtraukuma, pārkompilēšanas un iedarbināšanas no jauna. Ja ir nepieciešama jauna vadības struktūra, tad to vat pievienot. Dažās realizācijās var arī izmainīt valodas sintaksi un atkritumu savācēja darbības veidu. Ar dinamisko tipizāciju tiek apzīmēts tas, ka mainīgo tipi programmā netiek norādīti, kas padara šo programmēšanas valodu lakoniskāku. Model-view-controller (MVC) lietotāju saskarnes struktūras veidne. Pēdējā laikā tiek izmantotas arī citas lietotāju saskarnes realizācijas koncepcijas, piemēram, Morphic, Pollock. Dinamiskā translēšana. Mūsdienu komerciālās virtuālās mašīnas kompilē baitu kodus mašīnkodos ātrākai izpildei. Smalltalk izmanto arī citas mūsdienu idejas: Atkritumu savākšana ir iebūvēta valodā un izstrādātājam nepamanāma; 4

Smalltalk programmas parasti tiek kompilētas baitu kodos, un tās izpilda virtuālā mašīna (VM), kas Ĝauj izpildīt tās uz jebkuras aparatūras, kurai eksistē VM. Viena no negaidītām Smalltalk īpatnībām ir tāda, ka tādas tradicionālas konstrukcijas, kā ifthen-else, for, while, nav iekĝautas valodā. Viss ir realizēts ar objektu palīdzību. Piemēram, lēmumi tiek pieħemti, sūtot ziħojumu iftrue loăiskajam objektam. Pavisam ir tikai trīs konstrukcijas: ZiĦojuma sūtīšana objektam; Mainīgā piešėiršana objektam; Objekta atgriešana no metodes Un dažas sintakses konstrukcijas literāĝu objektu un pagaidu mainīgo definēšanai. Lai labāk izprastu, kā strādā ziħojumu apmaiħas mehānisms, var iedomāties katru objektu kā tīmekĝa serveri, kas atbild uz pieprasījumiem. Pie tam uz pieprasījumu var izdot iepriekš sagatavotu atbildi. Tā analogs ir tīmekĝa lappuses, kuru var atrast pēc noteikta, izdošana. Var pāradresēt pieprasījuma ziħojumu citam objektam, analogs ir starpniekserveris. Var izmainīt pieprasījumu zināmiem noteikumiem, analogs ir url rewriting tehnika. Ja reakcijai uz ziħojumu nav noteiktas metodes, tad tiek izsaukta metode #doesnotunderstand, kura tāpat kā tīmekĝa serveris atver lappusi ar kĝūdas paziħojumu, ja uz tīmekĝa lappusi tiek uzdots ceĝš, kas neeksistē. Uz attēliem bāzētā nemainība (image-based persistence) Lielākā daĝa populāro programmēšanas sistēmu atdala programmas kodu (klases definīcijas, funkcijas un procedūras) no programmas stāvokĝa (objekti un citi aplikācijas datu veidi). Tās ielādē programmas kodu, kad aplikācija tiek atvērta, un jebkurš iepriekšējais aplikācijas stāvoklis tiek no jauna izveidots no konfigurācijas failiem vai citiem datu avotiem. Visus uzstādījumus, kurus programmētājs nesaglabāja, nepieciešams no jauna uzstrādīt pēc aplikācijas pārlādēšanas. Tradicionāla aplikācija arī izmet daudz noderīgas dokumentu informācijas katru reizi, kad tiek saglabāts fails, aplikācija tiek aizvērta vai pārlādēta. Tiek pazaudētas tādas detaĝas kā izmaiħu vēsture un kursora pozīcija. Uz attēliem bāzētās sistēmas nepiespiež to visu izmest tikai tāpēc, ka ir jāizslēdz dators. Daudzas Smalltalk sistēmas neatdala aplikācijas datus (objektus) un kodu (klases). Faktiski klases arī ir objekti. Tāpēc lielākā daĝa Smalltalk sistēmu ievieto visu aplikācijas stāvokli, t.i., klašu un neklašu objektus, attēla failā. Tad Smalltalk interpretators var ielādēt attēlu, lai atjaunotu sistēmu saskaħā ar iepriekšējo stāvokli. Citas valodas, kas modelē aplikācijas kodu datu veidā, tādas kā Lisp, arī bieži vien izmanto uz attēliem bāzēto nemainību. Smalltalk attēli ir līdzīgi atmiħas atbrīvošanai (core dump) un nodrošina to pašu funkcionalitāti kā atmiħas atbrīvošana, piemēram, aizkāvēto vai attālināto atkĝūdošanu ar pilnu pieeju aplikācijas stāvoklim kĝudas gadījumā. Pieejas līmeħi Smalltalk-80 ir iespējams modificēt visu programmas izpildes laikā. Piemēram, integrēto izstrādes vidi (IDE) var mainīt sistēmā, kura darbojas, nepārstartējot to. Dažās implementācijās valodas sintaksi vai atkritumu savākšanas (garbage collection) implementāciju var mainīt programmas izpildes laikā. 5

Dinamiskā interpretācija (just-in-time compilation) Smalltalk programmas parasti tiek kompilētas līdz baitu kodam, kuru tad pārtulko virtuālā mašīna vai kurš tiek dinamiski pārtulkots mašīnkodā. Šo mehānismu pārħēma tādas valodas kā Java un C#. Smalltalk struktūra Sintakse Smalltalk-80 sintakse ir diezgan pieticīga, un tā balstās uz nelielu skaitu deklarāciju un rezervētu vārdu. Faktiski Smalltalk valodā ir tikai pieci rezervētie atslēgas vārdi: true, false, nil, self un super. Vienīgās iebūvētās valodas konstrukcijas ir ziħojumu sūtīšana, piešėiršana, metodes atgriešana un precīza sintakse dažiem objektiem. Pārējā valodas daĝa, ieskaitot kontroles struktūras nosacījumu vērtēšanai un iterācijām, ir realizēta, izmantojot Smalltalk standarta bibliotēkas. LiterāĜi Sekojošie piemēri parāda, kuri var tikt uzrakstīti kā literāĝu vērtības Smalltalk metodēs. SkaitĜi: 42-42 123.45 1.2345e2 2r10010010 16rA000 Divi pēdējie skaitĝi ir binārais un heksadecimālais. Skaitlis pirms r ir bāze. Bāzei nav obligāti jābūt divnieka pakāpei. Piemēram, 36rSMALLTALK ir pareizs skaitlis. Simboli tiek rakstīti aiz dolāra zīmes: $A Virknes ir simbolu secības, kas ir norobežotas ar pēdiħām: Hello, world! Lai iekĝautu rindā pēdiħas, jāizmanto divkāršās pēdiħas: I said, Hello, world! to them. Divas vienādas virknes (virknes ir vienādas, ja tās sastāv no vienādiem simboliem) var būt dažādi objekti, kas atrodas dažādās vietās atmiħā. Turklāt Smalltalk valodā ir simbolu secības objektu klase, kuru sauc par Symbol. Tiek nodrošināts, ka simboli ir unikāli; Nevar būt divu vienādu simbolu, kuri ir dažādi objekti. Tāpēc simboli ir ātri un viegli salīdzināt un tos bieži izmanto kā valodas artefaktus, piemēram, kā ziħojumu atlasītājus. Simboli tiek rakstīti aiz # zīmes. Piemēram: #foo 6

Masīvi: #(1 2 3 4) Tā tiek definēts četru veselu skaitĝu masīvs. Daudzi Smalltalk dialekti implementē papildus sintaksi citiem objektiem. Mainīgo deklarēšana Divi mainīgo veidi, kuri visbiežāk tiek lietoti Smalltalk valodā, ir instances mainīgie un pagaidu mainīgie. Citi mainīgie un ar tiem saistīta terminoloăija ir atkarīgo no konkrētas implementācijas. Piemēram, VisualWorks ir klašu koplietojamie mainīgie un vārdu redzamības apgabala koplietojamie mainīgie, bet Squeak un daudzās citās realizācijās ir klašu mainīgie, pūla mainīgie un globālie mainīgie. Smalltalk valodā pagaidu mainīgo deklarācijas ir mainīgie, kuri ir deklarēti metodēs. Tie ir deklarēti metodes sākumā kā vārdi, kuri ir atdalīti ar tukšumiem un norobežoti ar vertikālām līnijām. Piemēram: index deklarē pagaidu mainīgo ar nosaukumu index. Vairākus pagaidu mainīgos var deklarēt kopā: index vowels Tiek deklarēti divi mainīgie: index un vowel. Piešėiršana Mainīgajam tiek piešėirta vērtība, izmantojot := sintaksi: vowels := aeiou Iepriekš nodeklarētajam mainīgajam vowels tiek piešėirta virkne aeiou. Virkne ir objekts, kuru izveido kompilators kompilācijas laikā. ZiĦojumi Smalltalk valodā ziħojums ir pamata konstrukcija. Pat kontroles struktūras tiek implementētas, kad tiek nosūtīti ziħojumi. Sekojošajā piemērā skaitlim 42 tiek nosūtīts ziħojums factorial : 42 factorial Šādā situācijā 42 sauc par ziħojuma saħēmēju, bet factorial ir ziħojuma atlasītājs (selector). SaĦēmējs atbild uz ziħojumu, atgriežot vērtību. Šeit atbilde būs faktoriāls no skaitĝa 42. Pie tam ziħojuma rezultātu var piešėirt mainīgajam: aratherbignumber := 42 factorial Tādu factorial sauc par unāro ziħojumu, tāpēc ka tikai viens objekts, saħēmējs, ir ietverts. ZiĦojumi var saturēt papildus objektus kā argumentus, piemēram: 7

2 raisedto: 4 Šī izteiksme satur divus objektus: 2 ir saħēmējs un 4 ir ziħojuma arguments. ZiĦojuma rezultātam jeb atbildei visdrīzāk ir jābūt 16. Tādus ziħojumus sauc par atslēgvārdu ziħojumiem. ZiĦojumam var būt vairāki argumenti, izmantojot sekojošu sintaksi: hello world indexof: $l startingat: 6, kas atbild simbola l indeksam saħēmēja virknē, sākot meklēšanu ar indeksu 6. ZiĦojuma atlasītājs ir indexof: $l startingat:, kurš sastāv no divām daĝām jeb atslēgvārdiem. Tāda atslēgvārdu un argumentu mija ievērojami uzlabo koda lasāmību, tāpēc ka argumenti tiek paskaidroti ar atbilstošajiem atslēgvārdiem. Piemēram, tā ir izteiksme taisnstūra izveidošanai, kurā tiek lietota C++ vai Java līdzīga sintakse: new Rectangle(10, 20, 100, 200), kur nav skaidrs, kāds arguments ko apzīmē (kreisā puse, augša, labā puse, apakša) vai (kreisā puse, labā puse, augša, apakša), vai (kreisā puse, augša, platums, augstums). Smalltalk sintaksē tas ir acīmredzami: Rectangle left: 10 top: 20 right: 100 bottom: 200 Šajā gadījumā saħēmējs ir klase Rectangle, bet atbilde būs jauna klase instance ar norādītajiem parametriem. Beidzot, lielāko daĝu speciālo, nealfabēta simbolu drīkst lietot tā saucamajos binārajos ziħojumos. Tāpēc ir iespējams pierakstīt matemātiskus un loăiskus operatorus tradicionālajā formā: 3 + 4, kas sūta ziħojumu + saħēmējam 3 ar argumentu 4. Līdzīgi 3 > 4 sūta ziħojumu > 3 ar argumentu 4. Atbilde būs false. Jāpiezīmē, ka Smalltalk-80 valoda pati par sevi nesatur šo operatoru nozīmi. Rezultāts tiek definēts vienīgi ar to, kā ziħojuma saħēmējs atbild uz ziħojumu + vai >. Šī mehānisma blakusiedarbība ir operatoru pārslogošana. ZiĦojumu > var saprast arī citi objekti, Ĝaujot to izmantot, piemēram, izteiksmē a > b, lai salīdzinātu simbolus. Izteiksmes Izteiksmes var saturēt vairāku ziħojumu sūtīšanu. Tad izteiksmes tiek analizētas saskaħā ar vienkāršu prioritāšu secību. Unārajiem ziħojumiem ir augstākā prioritāte, tiem seko binārie ziħojumi, tad atslēgvārdu ziħojumi. Piemēram: 3 factorial + 4 factorial between: 10 and: 100 Izteiksme tiek novērtēta kā: 3 saħem ziħojumu factorial un atbild 6 4 saħem ziħojumu factorial un atbild 24 6 saħem ziħojumu + ar argumentu 24 un atbild 30 30 saħem ziħojumu between:and: un atbild true Atbilde uz pēdējā ziħojuma sūtīšanu ir visas izteiksmes rezultāts. Iekavas var izmainīt novērtēšanas secību, ja tas ir nepieciešams. Piemēram: (3 factorial + 4) factorial between: 10 and: 100 mainīs nozīmi tā, lai sākumā izteiksme rēėinātu 3 factorial + 4, dodot 10. 10 saħem nākamo factorial ziħojumu, dodot 3628800. 3628800 saħem between:and:, atbildot false. 8

Jāpiezīmē, ka bināro ziħojumu nozīmes nav nodefinētas Smalltalk-80 sintaksē, tāpēc tiek pieħemts, ka tiem visiem ir vienāda prioritāte un tie tiek novērtēti no kreisās puses un labo. Tāpēc Smalltalk izteiksmju, kurās tiek izmantoti binārie ziħojumi, nozīmes var atšėirties no tradicionālas interpretācijas: 3 + 4 * 5 tiek novērtēts kā (3 + 4) * 5, un atbilde ir 35. Unāros ziħojumus var saistīt, rakstot tos vienu aiz otra: 3 factorial factorial log, kas nosūta factorial 3, tad factorial rezultātam (6), tad log rezultātam (720), dodot 2.85733. Izteiksmju sērijas var pierakstīt kā sekojošajā piemērā, kurā katra rinda beidzas ar punktu. Piemērā sākumā tiek izveidota jaunā klases Window instance, kura tiek ievietota mainīgajā, un tad tai tiek sūtīti divi ziħojumi. window window := Window new. window label: Hello. window open. Ja ziħojumu sērija tiek sūtīta vienam un tam pašam saħēmējam kā sekojošajā piemērā, tad tos var pierakstīt kaskādes veidā, atsevišėus ziħojumus atdalot ar semikolu: (Window new) label: Hello ; open Tas vienkāršo pirmo piemēru, tāpēc ka nav nepieciešamības ievietot jaunu logu pagaidu mainīgajā. SaskaĦā ar parastajiem prioritātes noteikumiem unārais ziħojums new tiek sūtīts pirmais, tad tiek sūtīti label: un open atbildei uz new. Koda bloki Koda bloks (anonīma funkcija) var tikt izteikta kā precīza vērtība, kura ir objekts. Tas tiek sasniegts ar kvadrātiekavām: [ :params <message-expressions> ], kur :params ir parametru, kurus kods var saħemt, saraksts. Tas nozīmē, ka Smalltalk kods: [:x x + 1] var tikt saprasts kā: f(x) = x + 1 vai precīzāk λx.(x+1) Rezultātā bloka objekts ir slēgums. Tas var jebkurā brīdī piekĝūt iekĝauto leksisko apgabalu mainīgajiem. Bloki ir pirmās klases objekti, t.i., atsauces uz blokiem var tikt nodotas kā argumenti, atgrieztas kā vērtības vai saglabātas kā stāvoklis, tāpat kā citi objekti. Blokiem var pieprasīt izpildīt to kodu, sūtot tiem ziħojumu ar vērtību (ar vienu argumentu katram parametram blokā). Precīzs bloku attēlojums ir jaunievedums, kas padara kodu ievērojami lasāmāku. Tas Ĝauj rakstīt algoritmus ar iterācijām skaidri un kodolīgi. Kodu, kas parasti citās valodās tiek rakstīts ar cikliem, Smalltalk valodā var uzrakstīt īsāk, izmantojot blokus, dažos gadījumos pat vienā rindā. positiveamounts := allamounts select: [:amt amt ispositive ] Jāpiezīmē, ka tam ir saistība ar funkcionālo programmēšanu, kur aprēėinu modeĝi tiek abstrahēti augstākas kārtas funkcijās. 9

Kontroles struktūras Smalltalk valodā kontroles struktūrām nav noteiktas sintakses. Tās ir implementētas kā ziħojumi, kuri tiek sūtīti objektiem. Piemēram, nosacījuma izpilde tiek īstenota, sūtot ziħojumu iftrue: Boolean objektu, nosūtot koda bloku, kurš ir jāizpilda, kā argumentu tad un tikai tad, ja Boolean saħēmējs ir patiess. Sekojošais kods to parāda: result := a > b iftrue:[ gender ] iffalse:[ less ] Bloki arī tiek izmantoti, lai implementēti lietotāju definētās kontroles struktūras, numeratorus un daudzas citas struktūras. Piemēram: astring vowels astring := This is a string. Vowels := astring select: [:acharacter acharacter isvowel]. Pēdējā rindā tiek sūtīts ziħojums select: ar argumentu, kas ir koda bloks. Koda bloks tiks izmantots kā predikātu funkcija, kurai ir jāatbild true tad un tikai tad, ja virknes elements ir iekĝauts simbolu kopā, kuri apmierina testu, kas ir attēlots ar koda bloku, kas ir arguments select: ziħojumā. String objekts atbild uz ziħojumu select: iteratīvi caur to locekĝiem (sūtot sev ziħojumu do: ), novērtējot atlases bloku ( ablock ) pa vienai reizei ar katru simbolu, ko tas satur kā argumentu. Kad izlases bloks tika novērtēts, nosūtot ziħojumu value: each atbild ar boolean tipa vērtību, kas tālāk tiek nosūtīta iftrue:. Ja šī vērtība ir true, tad simbols tiek pievienots virknei, kura tiek atgriezta. Tā kā metode select: ir nodefinēta abstraktajā klasē Collection, to var izmantot arī šādā veidā: reclangles apoint rectangles := OrderedCollection with: (Rectangle left: 0 right: 10 top: 100 bottom: 200) with: (Rectangle left: 10 right: 10 top: 110 bottom: 210) apoint := Point x: 20 y: 20 collisions := rectangles select: [:arect arect containspoint: apoint]. Tā ir klases definīcija: Object subclass: #MessagePublisher instance VariableNames: classvariablenames: pooldictionaries: category: Smalltalk Examples Klases Bieži vien vide pati aizpildīs lielāko daĝu tādas definīcijas. Jāpiezīmē, ka tas faktiski ir ziħojums klasei Object, ka ir jāizveido apakšklase, kuru sauc par MessagePublisher. Citiem vārdiem, Smalltalk valodā klases ir pirmšėirīgas klases, kuras var saħemt ziħojumus kā jebkuri citi objekti un kuras var tikt dinamiski izveidotas izpildes laikā. 10

Metodes Kad objekts saħem ziħojumu, metode, kas atbilst ziħojuma nosaukumam, tiek izsaukta. Sekojošais kods nodefinē metodi publish un arī nodefinē, kas notiks, kad objekts saħems ziħojumu publish : publish Transcript show: Hello, world! Jāpiezīmē, ka objekti spēj dinamiski izpildes laikā noteikt, kāda metode ir jāizpilda kā atbildi uz ziħojumu. Daudzās citās programmēšanas valodās tas tiek noteikts statistiski kompilācijas laikā. Sekojošais kods MessagePublisher new izveido un atgriež jaunu klases MessagePublisher eksemplāru. Parasti tas tiek piešėirts mainīgajam: publisher := MessagePublisher new Arī ir iespējams sūtīt ziħojumus pagaidu, anonīmajiem objektiem: MessagePublisher new publish Piemēri Vienkāršs piemērs Hello, world! Transcript show: 'Hello, world!' Pirmkārt, tā ir ziħojuma sūtīšana. Smalltalk valodā visi aprēėini tiek veikti, sūtot ziħojumus objektiem. Šajā gadījumā ziħojums ir show: 'Hello, world!', un tas tiek sūtīts objektam Transcript. Lai apstrādātu šo ziħojumu, tiks izsaukta Transcript metode show, kurai ir jāaplūko savs arguments (rinda Hello, world! ) un jāattēlo tas uz Transcript. Jāpiezīmē, ka ir jābūt atvērtam logam Transcript, lai redzētu rezultātu. Otrkārt, šis piemērs parāda Smalltalk ziħojumu sūtīšanas pamata sintaksi: <ziħojuma saħēmējs><atstarpe><ziħojums>. Atšėirībā no C++ nav punkta pēc saħēmēja un argumenti nav iekĝauti iekavās. Smalltalk klases piemērs class name superclass instance variable names class variable names FinancialHistory Object allincomes incomes allexpenditures expenditures RateTax 11

class methods initialize initialize RateTax <- 0.12 instance creation initialbalance: amount ^super new setinitialbalance: amount new ^super new setinitialbalance: 0 instance methods transaction recording receive: amount from: source incomes at: source put: (self totalreceivedfrom: source) + amount. allincomes <- allincomes + amount spend: amount for: reason expenditures at: reason put: (self totalreceivedfrom: source) + amount. allexpenditures <- allexpenditures - amount inquiries cashonhand ^allincomes - allexpenditures amountoftax ^(RateTax * allincomes / (1 - RateTax)) truncate totalreceivedfrom: source (incomes includeskey: source) iftrue: [^incomes at: source] iffalse: [^0] totalspentfor: reason (expenditures includeskey: reason) iftrue: [^expenditures at: reason] iffalse: [^0] private setinitialbalance: amount allincomes <- amount. allexpenditures <- 0. incomes <- Dictionary new. expenditures <- Dictionary new Klases apraksts sākas ar virsrakstu, kurā ir norādīts, ka klase FinancialHistory tiek izveidota kā klases Object apakšklase. Klasei ir viens mainīgais RateTax, kas ir pieejams visiem klases eksemplāriem, bet katram klases eksemplāram ir četri eksemplāra mainīgie, kas nosaka tā struktūru 12

allincomes, incomes, allexpenditures, expenditures. Pirmajā un trešajā minīgajā attiecīgi glabāsies kopīgās ienākumu un izdevumu summas, otrais un ceturtais mainīgais ir vārdnīcas, kas satures ienākumu un izdevumu summas un avotus. Klase iekĝauj sevī daĝu, kuru sauc par klases metodēm (class methods) un kurā ir aprakstītas metodes, ko pievieno metaklase, lai vērstos pie klases kā pie sistēmas objekta. Tādējādi klases metodes un eksemplāra metodes (instance methods) tiek aprakstītas kopā. Katrā klasē metodes tiek sadalītas kategorijās, kurās tiek apvienotas metodes, kuras tiek izmantotas līdzīgiem mērėiem. Šajā piemērā metodes ir sadalītas divās kategorijās. Initialize satur tikai vienu metodi klases mainīgā inicializēšanai. Instance creation satur divas metodes jauno klases eksemplāru ar dažādu skaidrās naudas daudzumu izveidošanai. Jāpievērš uzmanība tam, ka eksemplāru izveidošanas metodēm (ziħojumi initialbalance un new) nav tiešas pieejas jaunā eksemplāra mainīgajiem, tāpēc ka tās metaklases daĝas. Tāpēc eksemplāru izveidošanas metodes sākumā izveido eksemplārus ar neinicializētajiem mainīgajiem un tad sūta tiem inicializācijas ziħojumu setinitialbalance:. Metode šim ziħojumam atrodas klases FinancialHistory realizācijas aprakstā. Šī metode prot eksemplāra mainīgajiem piešėirt atbilstošas vērtības. Inicializācijas ziħojums netiek uzskatīts par klases FinancialHistory ārējā protokola daĝu, bet atrodas privāto metožu kategorijā. Parasti tādi ziħojumi tiek sūtīti tikai ar citām metodēm. Eksemplāra metodes tiek attēlotas vēl divās kategorijās. Kategorijā transaction recording ir metodes, kuras Ĝauj atcerēties, no kurienes un cik ir iegūts ieħēmumu (receive: amount from: source) un cik un kāpēc iztērēts (spend: amount for: reason). Kategorijā inquiries ir metodes, kas Ĝauj noteikt, cik naudas ir iegūts no noteikta avota (totalreceivedfrom: source), cik naudas ir iztērēts noteikta iemesla dēĝ (totalspentfor: reason), cik naudas ir palicis (cashonhand) un cik no nopelnītā ir samaksāts kā ieħēmumu nodoklis (amountoftax), pieħemot, ka nodokĝa līkme nav atkarīga no summas un ir 12%. Izmantojamie metodēs pseidomainīgie self un super vienmēr atsaucas uz objektu, kas izsauc šo metodi izpildei. Starp tiem ir būtiska atšėirība: metodes, kuru nosūtīja self, meklēšana vienmēr sākas ar klasi, kurai pieder ziħojuma saħēmējs, bet metodes, kuru nosūtīja super, meklēšana sākas no tās klases superklases, kurā atrodas metode, kas satur pseidomainīgo super. ^ ir vērtības atgriešanas simbols, kurš, ja tas tiek atrasts aprēėinu gaitā, pieĝauj rēėināšanu tikai izteiksmei, kas atrodas tieši pēc tā (līdz nākamajam punktam aiz tā), pārtrauc metodes izpildi un atgriež šīs izteiksmes rezultātu, kā visas metodes rezultātu. Lai izmantotu klasi, to vispirms ir nepieciešams inicializēt: FinancialHistory initialize. Tad var izveidot kādas ăimenes ieħēmumu un izdevumu grāmatu, aprēėinot sekojošas izteiksmes: FamilyFinancialHistory <- FinancialHistory new. FamilyFinancialHistory receive: 500000 from: 'зарплатажены'; receive: 400000 from: 'зарплатамужа'; receive: 300000 from: 'пенсиятещи'. FamilyFinancialHistory spend: 150000 for: 'напродукты'; spend: 50000 for: 'накниги'; spend: 300000 for: 'наодежду'. 13

Izmantotā literatūra [1] Smalltalk [tiešsaiste]. [atsauce 13.02.2007]. Pieejams Internetā: http://ru.wikipedia.org/wiki/smalltalk [2] Smalltalk-80 [tiešsaiste]. [atsauce 13.02.2007]. Pieejams Internetā: http://en.wikipedia.org/wiki/smalltalk [3] Кирютенко Ю.А., Савельев В.А. Незнакомый Smalltalk [tiešsaiste]. [atsauce 15.02.2007]. Pieejams Internetā: http://www.math.rsu.ru/smalltalk/unknown-smalltalk.ru.html 14