Apple Computer Inc
10260 Bandley Dr
Cupertino CA 95014
Když píšu tento článek, mám na sobě tričko (foto 1), které mi dal známý. Přes celou hruď je vyvedena hlasitá výzva:
BÝT
V MÓDU
Kolem nápisu je kruh z ostnatého drátu, který symbolizuje pocit uvěznění, který často zažívám, když je můj počítač "v módu".
Drobným písmem jsou kolem trička vyvedena jména některých módů, které znám a odsuzuji od počátku 60. let, kdy jsem z temnoty děrných štítků vyšel do úsvitu interaktivních terminálů. Moje galerie nelidských faktorů zahrnuje příkazové režimy jako INSERT, REPLACE, DELETE a SEARCH, stejně jako onu nevyhnutelnou výzvu "FILE NAME?". Barva potlače je příhodně velmi modrá.
Kamarád mi dal tričko, aby si udělal legraci z téměř fanatické kampaně, kterou vedu už několik let, kampaně za odstranění režimů z povrchu zemského - nebo alespoň z povrchu obrazovky mého počítače. Začalo to v roce 1973, kdy jsem začal pracovat ve výzkumném středisku Xerox Palo Alto Research Center (PARC) na návrhu interaktivních systémů, které měli používat kancelářští pracovníci při přípravě dokumentů. Pozorování sekretářek, které se učily používat tehdejší textové editory, mě brzy přesvědčilo, že mé milované počítače jsou ve skutečnosti nepřátelské příšery a že jejich nejostřejšími tesáky jsou všudypřítomné režimy. Nejčastější otázka, kterou si noví uživatelé kladli přinejmenším stejně často jako "Jak to mám udělat?", byla "Jak se dostanu z tohoto režimu?". Také další výzkumníci odsoudili převahu režimů v interaktivních [systémech pro začínající uživatele][1] .
Novici nejsou jedinými oběťmi režimů. Experti často zadávají příkazy používané v jednom režimu, když jsou v jiném, což vede k nežádoucím a nepříjemným důsledkům. V mnoha systémech může mít zadání písmene "D" tak různorodý význam jako "nahradit vybraný znak písmenem D", "vložit písmeno D před vybraný znak" nebo "odstranit vybraný znak". Kolikrát jste už slyšeli nebo řekli: "Jejda, byl jsem ve špatném režimu?"
Předpoklad
I když si pamatujete, v jakém režimu jste, stále se můžete dostat do pasti. Pokud používáte program pro vykreslování dat, můžete používat pouze příkazy, které jsou v tomto programu uvedeny. Nemůžete použít žádné užitečné možnosti počítače, které autor programu nezohlednil, například získání seznamu souborů na disku. Na druhou stranu, pokud používáte program, který umožňuje vytvořit seznam souborů, pravděpodobně nemůžete použít textový editor ke změně jejich názvů. Také pokud používáte textový editor, pravděpodobně nemůžete vykreslit graf z čísel, která se objeví v dokumentu.
Pokud ukončíte některý program a spustíte jiný, data zobrazená prvním programem se pravděpodobně vymažou z obrazovky a nenávratně se ztratí z dohledu. Obecně lze říci, že "spuštění programu" ve většině systémů vás uvede do režimu, ve kterém jsou pro vás prostředky jiných programů nedostupné. Dan Swinehart tomu říká dilema [preempce][2].
Mnoho systémů obsahuje hierarchii režimů. Část typické hierarchie režimů je znázorněna na (obrázku 1). Pokud jste v editoru a chcete zkopírovat text ze souboru, zadáte příkaz kopírovat-z
a zobrazí se dotaz z jakého souboru?. Poté zadáte název souboru. Co když si nemůžete vzpomenout na jeho pravopis? Žádný problém. Opusťte režim z-jakého souboru, opusťte režim kopírování z, uložte upravený text, odejděte z editoru do exekutivy, vyvolejte z exekutivy správu souborů, vydejte příkaz seznam souborů, vyhledejte požadovaný název (Hej, to šlo moc rychle. Omlouvám se, v tomto režimu se nemůžete vrátit zpět.), ukončete příkaz seznam, odejděte ze správy souborů do exekutivy, znovu vstupte do editoru, vydejte příkaz kopírování z
, a až se vás zeptá z-jakého souboru?, jednoduše zadejte název (nezapomněli jste, že ne?).
Nemusíte být sympatizantem uživatelů, abyste se připojili k tažení proti režimům. I ten nejchladnokrevnější programátor je obětí. Řekněme, že jste naprogramovali novou videohru pro svůj osobní počítač a narazili jste na chybu. Na obrazovce se objeví obskurní chybové hlášení promíchané s vesmírnými loděmi a mimozemskými formami. Abyste na obrazovce viděli nejnovější verzi programu, musíte vymazat právě ty důkazy, které potřebujete k vyřešení problému. Proč? Protože systém vás nutí vybrat si mezi režimem úprav a režimem spouštění. Nemůžete mít obojí.
Vstup do integrovaného prostředí
Brzy poté, co jsem začal bojovat s režimovou příšerou, jsem se spojil s Alanem Kayem, který právě založil Learning Research Group (LRG) v Xerox PARC. Kay sdílel mé opovržení režimy a vymyslel [paradigma uživatelského rozhraní][3], které eliminovalo jeden druh režimu, ten, který způsoboval dilema preempce. Paradigma, které obhajoval, se nazývalo "překrývající se okna".
Většina lidí, kteří používali počítačové displeje, zná okna. Jedná se o obdélníkové rozdělení obrazovky, z nichž každé zobrazuje jinou sadu informací. V některých okenních systémech můžete mít rozpracováno několik úloh, z nichž každá je reprezentována v jiném okně, a mezi úlohami můžete volně přepínat přepínáním mezi okny.
Problém většiny okenních systémů spočívá v tom, že okna mezi sebou soupeří o místo na obrazovce - pokud zvětšíte jedno okno, jiné okno se zmenší. Kayův nápad byl umožnit, aby se okna překrývala. Obrazovka je znázorněna jako plocha stolu a okna jako překrývající se listy papíru (foto 2). Částečně zakryté listy vykukují zpoza listů, které je zakrývají. Pomocí ukazovacího zařízení, které pohybuje kurzorem po obrazovce, můžete přesunout kurzor na částečně zakrytý list a stisknutím tlačítka na ukazovacím zařízení tento list odkrýt.
Výhody paradigmatu překrývajících se oken jsou:
-
zobrazení spojená s několika uživatelskými úlohami lze zobrazit současně
-
přepínání mezi úlohami se provádí stisknutím tlačítka
-
při přepínání mezi úlohami nedochází ke ztrátě informací
-
místo na obrazovce je využíváno hospodárně
Okna jsou samozřejmě v jistém smyslu režimy v rouše beránčím. Jsou přívětivější než režimy, protože do okna nemůžete nevědomky vklouznout, když se nedíváte na obrazovku, a protože do kteréhokoli okna můžete kdykoli vstoupit a vystoupit z něj stisknutím tlačítka.
Kay považoval své paradigma za základ toho, co nazýval "integrované prostředí". Když máte integrované prostředí, mizí rozdíl mezi operačním systémem a aplikací. Všechny schopnosti osobního počítače máte vždy k dispozici a můžete je použít na libovolné informace. S minimálním úsilím můžete přecházet mezi tak různorodými činnostmi, jako je ladění programů, editace prózy, kreslení obrázků, přehrávání hudby a spouštění simulací. Informace vytvořené jednou činností lze předávat jiným činnostem, a to buď přímou interakcí s uživatelem, nebo pod kontrolou programu.
Když Kay v roce 1972 vymyslel jazyk Smalltalk, navrhl jej se schopností podporovat integrované prostředí. Implementace jazyka Smalltalk vytvořené Danem Ingallsem a dalšími členy skupiny Learning Research Group dosahovaly stále větší integrace. Souborový systém, systém správy procesů, grafické schopnosti a překladač jsou téměř kompletně implementovány ve Smalltalku. Jsou přístupné z jakéhokoli programu i přímou interakcí s uživatelem.
V posledních letech se myšlenka integrovaného prostředí rozšířila i mimo skupinu Learning Research Group, a dokonce i do jiných systémů než Smalltalku. Paradigma okno-na-program je nyní běžné a mnoho návrhářů systémů model překrývajícího se listu obrazovky přijalo.
V souhrnu se termín prostředí používá pro označení všeho v počítači, k čemu může člověk přímo přistupovat a co může jednotně a koordinovaně využívat. V integrovaném prostředí může člověk prolínat činnosti, aniž by přišel o nahromaděné informace a aniž by se vzdal možností.
Silné stránky Smalltalku
Předtím, než se budeme hlouběji zabývat podstatou prostředí Smalltalku, měli bychom nejprve probrat jeho účel.
Mnoho univerzálních programovacích jazyků je pro určité úlohy vhodnějších než jiné. BASIC se snadno učí a je ideální pro malé dialogově orientované programy. FORTRAN se dobře hodí pro numerické aplikace. COBOL je přizpůsoben pro zpracování obchodních dat. Pascal je dobrý pro výuku strukturovaného programování.
LISP je skvělý pro zpracování symbolických informací. APL vyniká při manipulaci s vektory a maticemi. Jazyk C je skvělý pro systémové programování. SIMULA je skvělá pro diskrétní simulace. FORTH umožňuje rychle vyvíjet efektivní modulární programy na velmi malých počítačích.
Všechny tyto jazyky se kromě zmíněných používají k mnoha dalším účelům. Téměř každý program můžete napsat lépe v jazyce, který dobře znáte, než v jazyce, který znáte špatně. Pokud se však jazyky porovnávají z širšího hlediska, než je hledisko úzkého odborníka, každý jazyk vyniká nad ostatními, pokud se používá k účelu, pro který byl navržen.
Ačkoli byl Smalltalk používán pro mnoho různých aplikací, vyniká v určitém stylu vývoje softwaru na určitém typu stroje. Stroj, který nejlépe odpovídá silným stránkám jazyka Smalltalk, je osobní počítač s displejem s vysokým rozlišením, klávesnicí a ukazovacím zařízením, jako je myš nebo grafický tablet (foto 3a). Kurzor na obrazovce sleduje pohyby myši na stole, takže můžete ukazovat na objekty na obrazovce. [Myš][4] má na horní straně jedno nebo více tlačítek (foto 3b). Jedno tlačítko slouží jako tlačítko pro výběr. Pokud je tlačítek více, obvykle se používají jako tlačítka nabídek.
Pokud má počítač výkonnou diskovou jednotku, můžete použít verzi Smalltalku s virtuální pamětí a mít k dispozici pouze 80 K bajtů hlavní paměti, nepočítaje paměť pro obnovení zobrazení. V opačném případě byste měli mít k dispozici alespoň 256 K bajtů paměti. Tolik paměti je potřeba, protože celé integrované prostředí žije v jednom adresovém prostoru. Zahrnuje nejen obvyklou podporu běhu jazyka, ale i okenní grafiku, editor, kompilátor a další pomůcky pro vývoj softwaru. Psané programy bývají malé, protože mohou stavět na existujících prostředcích; žádné systémové prostředky nejsou před uživatelem skryty. Uživatelé jazyků LISP a FORTH budou s touto myšlenkou obeznámeni.
Smalltalk podporuje svůj preferovaný hardware tím, že obsahuje softwarové balíky, které poskytují:
-
výstup pro uživatele prostřednictvím překrývajících se oken
-
vstup z klávesnice, ukazovacího zařízení a menu
-
jednotné zpracování textových, grafických, symbolických a číselných informací
Tyto interaktivní prostředky jsou hojně využívány vestavěnými programovými pomůckami a jsou k dispozici všem uživatelsky psaným aplikacím.
Styl vývoje softwaru, na který je Smalltalk orientován, je výzkumný . Při výzkumním vývoji by mělo být rychlé vytvářet a testovat prototypy a mělo by být snadné je měnit bez nákladných následků. Smalltalk je užitečný, protože:
-
Jazyk je stručnější než většina ostatních, takže se u klávesnice stráví méně času.
-
Textový editor je jednoduchý, nemodelový a vyžaduje minimum stisků kláves.
-
Uživatel může přecházet mezi činnostmi programování, kompilace, testování a ladění stiskem tlačítka.
-
Jakékoli požadované informace o programu nebo jeho provádění jsou přístupné během několika sekund s minimálním úsilím.
-
Překladač dokáže přeložit a znovu propojit jedinou změnu do prostředí během několika sekund, takže odpadá čas obvykle promarněný čekáním na rekompilaci po malé úpravě programu.
-
Programy Smalltalku rostou ladně. Ve většině prostředí je s růstem systému jeho změna obtížnější. Přidáte-li do prostředí Smalltalku dva megabajty virtuální paměti, můžete druhý megabajt zaplnit užitečnými schopnostmi stejně rychle, jako jste dokázali zaplnit první.
-
Třídní struktura jazyka zabraňuje objektům vytvářet příliš mnoho předpokladů o vnitřním chování jiných objektů (viz článek Davida Robsona "Objektově orientované softwarové systémy" na straně 74 tohoto čísla). Programátor může rozšířit nebo změnit metody používané v jedné části programu, aniž by musel přeprogramovávat ostatní části.
Anatomie okna
V průběhu let členové skupiny Learning Research Group původní Kayovu koncepci okna přikrášlili. Podívejme se na okno Smalltalku podrobněji (obrázek 2).
Okno je znázorněno jako orámovaná obdélníková plocha, k jejímuž hornímu okraji je připojena záložka s názvem. Program spojený s oknem musí omezit svůj výstup na orámovanou oblast.
Každé okno má nabídku okna (foto 4a). Nabídka okna obsahuje příkazy pro změnu velikosti a umístění, pro zavření okna, pro tisk obsahu okna na zařízení pro tisk a pro načtení oken skrytých pod ním.
Kolem okna jeden nebo více panelů, z nichž každý má vlastní nabídku panelu (foto 4b). Nabídka podokna obsahuje příkazy odpovídající obsahu daného podokna. Kromě toho má podokno na své levé straně posuvník, který slouží k posouvání obsahu podokna, pokud existuje více informací, než se vejde do rámečku najednou.
Přestože můžete vidět mnoho oken a podoken najednou, můžete v daném okamžiku pracovat pouze s jedním podoknem. O tomto podokně a jeho okně se říká, že jsou navrchu, nebo aktivní. Chcete-li probudit jiné podokno téhož okna, přesuňte kurzor na nové podokno (foto 4c). Chcete-li probudit jiné okno, přesuňte kurzor nad nové okno a stiskněte tlačítko výběru na ukazovacím zařízení (foto 4d). Po probuzení okna se zobrazí jeho záhlaví a všechna jeho podokna a není již zakryto jinými okny.
Posuvník aktivního podokna se nazývá aktivní posuvník. Jeho nabídka a nabídka jeho okna se nazývají aktivní nabídky. Aby se snížil nepořádek na obrazovce a maximalizovalo se využití drahocenného místa na obrazovce, nezobrazují se žádné neaktivní posuvníky ani nabídky. Na počítačích, které používají ukazovací zařízení se třemi tlačítky, některé verze Smalltalku aktivní nabídky dokonce skrývají, dokud není stisknuto jedno ze dvou tlačítek nabídky, v tu chvíli se příslušná nabídka objeví a zůstane nahoře, dokud tlačítko neuvolníte. Pokud je tlačítko uvolněno v okamžiku, kdy je kurzor nad příkazem v nabídce, tento příkaz se provede (foto 4e).
Možnosti editace bez režimu
Paradigma překrývajících se oken pomáhá eliminovat předbíhání. Může také snížit potřebu některých výzev a s nimi spojených režimů. Například nikdy nemusíte zadávat název procedury, kterou chcete prozkoumat. V nejhorším případě ukážete na její název v seznamu, v nejlepším případě je požadovaná procedura již v okně na obrazovce a vy aktivujete toto okno.
Naneštěstí překrývající se okna sama o sobě neeliminují příkazové režimy jako vložit a nahradit. V letech 1973 až 1975 jsem v PARCu pracoval s různými spolupracovníky, včetně Dana Swineharta a Timothyho Motta, na odstranění příkazových režimů z interaktivních systémů. Přes počáteční skepsi si téměř všichni uživatelé našich prototypů absenci režimů oblíbili. Pro odstranění režimů z editace textu jsme vymysleli následující techniky. Jsou analogické technikám používaným k udržení polské aritmetické notace v kalkulátorech relativně bez režimů. Podobné techniky lze aplikovat i na rozvržení stránky, tvorbu grafiky a další interaktivní úlohy.
Výběr předchází příkazu:
-
Každý příkaz se provede okamžitě po jeho vydání. Nejste vyzváni k jeho potvrzení. Můžete vydat příkaz
undo
, abyste zvrátili účinky naposledy vydaného příkazu. Ačkoli hlavním účelem příkazu undo je kompenzovat nedostatek potvrzení příkazu, lze jej použít i ke změně názoru po vydání příkazu. -
Pro příkaz jako
zavřít aktivní okno
, který nevyžaduje žádné další parametry, stačí příkaz vydat. -
Pro příkaz jako
odstranit text
, který vyžaduje jeden parametr, nejprve vyberete parametr pomocí ukazovacího zařízení a poté vydáte příkaz. Dokud příkaz nevydáte, můžete si to rozmyslet a provést jiný výběr, nebo dokonce zvolit jiný příkaz. -
U příkazu, jako je
odeslat elektronickou poštu
, který vyžaduje několik parametrů (příjemce, předmět, obsah), nejprve vyplníte parametry do formuláře pomocí bezmodulové editace textu a poté vydáte příkaz. Při vyplňování formuláře nejste v módu. Pokud chcete do formuláře něco zkopírovat z jiného místa, můžete. Pokud chcete místo toho udělat něco jiného, prostě to udělejte; k formuláři se můžete vrátit i později a vyplňování dokončit.
Vypisování textu vždy nahrazuje vybrané znaky:
- Stisknutí textové klávesy na klávesnici nikdy nevydá příkaz. Vždy nahradí aktuální výběr zadaným znakem a automaticky vybere mezeru následující za tímto znakem.
-
Chcete-li nahradit pasáž textu, nejprve ji vyberte (foto 5a) a pak zadejte náhradu. První stisk klávesy odstraní původní text (foto 5b).
-
Chcete-li vložit mezi znaky, nejprve vyberete mezeru mezi těmito znaky (foto 6a) a poté zadáte vložení (foto 6b). V podstatě ničím nic nenahrazujete.
-
Destruktivní funkce zpětného výběru vždy odstraní znak, který předchází výběru, i když tam tento znak byl před provedením výběru.
- Příkaz
undo
(fotografie 6c a 6d) lze použít ke zvrácení účinků veškerého psaní a zpětného výběru od doby, kdy jste naposledy provedli výběr pomocí ukazovacího zařízení.
Obvyklé režimy vkládání, připojování a nahrazování jsou složeny do jednoho režimu - režimu nahrazování - a jeden režim není vůbec žádný režim.
Klávesa shift lock a analogické příkazy jako bold shift
a underline shift
způsobují režimy pro interpretaci následně napsaných znaků. Posuny jsou však lidem známé a jsou relativně neškodné. Nejhorší, co způsobí, je změna písmene "d" na "D", "d" nebo "d" - nikdy ne na příkaz Delete
.
Zobrazení bitové mapy může zobrazovat tučné písmo, stejně jako kurzívu, podtržení a různé styly a velikosti tiskacího písma (foto 7). Když tedy zadáváte text tučným písmem, na displeji se zobrazí, jak bude text vypadat, až bude vytištěn. Příkaz jako tučné písmo shift
(bold shift
) lze použít i na existující text, aby se změnil na tučné písmo.
V roce 1976 navrhl Dan Ingalls uživatelské rozhraní pro Smalltalk, které zahrnovalo většinu technik pro vyhýbání se režimům, o nichž byla řeč dříve. V důsledku toho se v současném prostředí Smalltalku s režimem setkáte jen zřídka.
Výběr
V uživatelském rozhraní Smalltalku-76 se text vybírá pomocí ukazovacího zařízení a jediného tlačítka. Nejprve se kurzor přesune na jeden konec pasáže, která má být vybrána (foto 8a). Tlačítko výběru se stiskne a podrží, zatímco se kurzor přesune na druhý konec úryvku. Tato operace se nazývá "protažení", ačkoli cestou k cíli není nutné procházet mezilehlé znaky. Jakmile kurzor dosáhne druhého konce pasáže, tlačítko se uvolní. Vybraná pasáž se poté zobrazí v [inverzním videu][ivideo] (foto 8d).
Zpětná vazba poskytovaná uživateli během výběru je následující. Po stisknutí tlačítka se v nejbližší meziznakové mezeře objeví svislý pruh (foto 8b). (Na levém konci řádku textu se pruh objeví vlevo od prvního znaku. Na pravém konci řádku se pruh objeví vlevo od posledního znaku mezery).
Pokud tlačítko uvolníte, aniž byste pohnuli kurzorem, pruh zůstane, což znamená, že byl proveden výběr s nulovou šířkou. Tuto metodu - jednorázové kliknutí mezi znaky - je vhodné použít před vložením nového textu.
Pokud je tlačítko podrženo a kurzor se pohybuje, systém poskytuje průběžnou zpětnou vazbu zvýrazněním inverzního videa všech znaků mezi počátečním pruhem a mezerou nejblíže kurzoru (foto 8c). Po uvolnění tlačítka zůstanou vybrané znaky zvýrazněné (foto 8d). Tuto metodu - protažení pasáže - je vhodné použít před kopírováním, přesouváním, mazáním nebo nahrazováním textu, případně před změnou jeho tučného písma nebo jinou změnou jeho vzhledu.
Klepnutím na tlačítko dvakrát s kurzorem na stejném místě uvnitř slova se vybere celé slovo a zvýrazní se (foto 8e). Tento speciální mechanismus je k dispozici proto, že je velmi časté vybrat slovo. Neformální experimenty nás vedou k přesvědčení, že dvojí kliknutí je pro začátečníky i experty mnohem snazší než protahování slova. Je také rychlejší. Průměrnému uživateli trvá výběr slova kdekoli na obrazovce pomocí protažení asi 2,6 sekundy, ale pomocí dvojitého kliknutí je to jen [1,5 sekundy][5].
V aktivním panelu je pouze jeden výběr. Nazývá se aktivní výběr.
Vydání příkazu
Když ve Smalltalku vydáváte příkaz, posíláte objektu zprávu. Existují dva způsoby, jak poslat zprávu z Ingallsova uživatelského rozhraní. Některé běžně odesílané zprávy můžete poslat aktivnímu panelu nebo oknu výběrem z nabídek; libovolnou zprávu můžete poslat libovolnému objektu přímým provedením příkazu jazyka Smalltalk.
Smalltalk-76 poskytuje vyskakovací nabídky pro nejčastěji používané příkazy, například vyjmout
(cut
), který odstraní vybraný text. Příkaz vyjmout
vydáte tak, že jedním z tlačítek nabídky na myši vyvoláte nabídku aktivní oblasti (foto 9a), toto tlačítko podržíte stisknuté a zároveň přesunete kurzor na název příkazu (foto 9b) a pak tlačítko uvolníte (foto 9c). Příkaz v podokenní nabídce může mít pouze jeden parametr, aktivní výběr. Příkaz v nabídce okna nemůže mít žádné parametry.
Chcete-li vydat příkaz, který není k dispozici v nabídce, vyberte libovolné místo, kam lze vložit text, a celý příkaz napište jako příkaz v jazyce Smalltalk (foto 10a). Poté tento příkaz vyberete a vydáte jednoparametrický příkaz udělej to
(do it
) (foto 10b), abyste získali výsledek (foto 10c). Příkaz do it
umožňuje okamžité provedení libovolného příkazu nebo skupiny příkazů jazyka Smalltalk. Tento způsob vydávání příkazů využívá předchozí metodu: do panelu posíláte zprávu doit
, jejímž parametrem je příkaz jazyka Smalltalk.
Běžnou praxí je udržovat kolem obrazovky okno "work-space", do kterého zadáváte příkazy, které nejsou součástí menu. Když chcete znovu zadat dříve vydaný příkaz, který není v menu, jednoduše jej vyberte v okně pracovního prostoru a "proveďte". Než příkaz vyberete a "provedete", můžete samozřejmě upravit některé parametry starého příkazu. V jistém smyslu vyplňujete formulář, když upravujete parametry okamžitého příkazu.
Naneštěstí běžné příkazy "přesunout text odsud sem" a "kopírovat text odsud tam" nelze vydat jediným příkazem z nabídky, protože vyžadují dva parametry, výběr zdroje a výběr cíle. Někdy dokonce zahrnují zprávy do více než jednoho podokna, do zdrojového a cílového podokna. V bezmódvém systému se příkaz přesunu (move
) nebo kopírování (copy
) provádí ve dvou krocích:
-
Přesun se provede vyjmutím a vložením. Nejprve vyberete zdrojový text a vydáte příkaz
vyjmout
(cut
) (foto 11a). Příkazvyjmout
vybraný text odstraní (foto 11b), ale ponechá jej na speciálním místě, odkud jej lze znovu získat příkazemvložit
(paste
). Poté vyberete cílový text a příkazemvložit
(foto 11c) dokončíte přesun (foto 11d). -
Kopírování se provádí příkazem
kopírovat a vložit
(copy and paste
), který je zcela analogický příkazuvyjmout a vložit
(cut and paste
), ale původní text neodstraní.
Pamatujete si na příklad "kopírování ze souboru" (ten, kde jste museli přecházet z mnoha vrstev režimů)? V uživatelském rozhraní Smalltalku-76 toho můžete dosáhnout pomocí šesti stisknutých tlačítek, bez výstupů z režimů a bez psaní: (1) aktivujte zdrojové okno, které zobrazuje soubor, z něhož kopírujete; (2) vyberte požadovaný text; (3) vydejte příkaz "kopírovat" v nabídce; (4) aktivujte cílové okno; (5) vyberte cílový bod a (6) vydejte příkaz "vložit" v nabídce. Práce nevyžaduje o mnoho více úsilí než kopírování v rámci téhož dokumentu. Pokud již není okno na obrazovce a nemůžete si vzpomenout na název souboru, můžete přejít do jiného okna a procházet seznam souborů, aniž byste museli ukončovat režimy, vyvolávat programy, ukládat úpravy, ztrácet cílový soubor z dohledu nebo ztrácet čas.
Možnosti editace textu ve Smalltalku-76 vás nejen zbaví břemene režimů, ale také vyžadují velmi málo stisků kláves a snadno se je naučíte.
Pomůcky pro vývoj softwaru
Jedním z mých letních projektů v roce 1977 bylo zvýšit rychlost a přívětivost prostředí pro vývoj softwaru ve Smalltalku přidáním oken pro kontrolu, procházení a oznamování do uživatelského rozhraní. Tato a další vylepšení provedená skupinou Learning Research Group jsou popsána níže. V posledních měsících tým dále vylepšil prostředí Smalltalku-80. Přestože odpovídá stejným principům jako dříve, jeho detaily se liší od toho, co je popsáno v tomto článku.
Následující šablona obsahuje popis pravidelného polygonu s následujícími atributy: | |||||||||||||||||||||
strany | Počet stran (3 pro trojůhelník, pět pro pětůhelník apod.) | ||||||||||||||||||||
centrum | Centrum kružnice obepínající rovnolehlý mnohoůhelník | ||||||||||||||||||||
poloměr | Poloměr této kružnice | ||||||||||||||||||||
polter | Pero, které nakreslí obrázek mnohoůhelníku na obrazovku nebo papír | ||||||||||||||||||||
Následující výrazy jsou příkladem pro vytvoření a použití instance rovnoměrnýMnohoůhelník | |||||||||||||||||||||
|
|||||||||||||||||||||
initialization | |||||||||||||||||||||
sides: s radius: r || | |||||||||||||||||||||
Vytvoření instance RegularPolygon, jejíž střed se nachází ve středu aktuálně aktivního okna na obrazovce displeje Screen je globální proměnná, která odkazuje na hardwarovou obrazovku displeje. | |||||||||||||||||||||
↑ self new sides: s radius: r center: (Screen activeWindow frame center) | |||||||||||||||||||||
metody a správy instance | |||||||||||||||||||||
initialization | |||||||||||||||||||||
sides: s radius: r center: c || | |||||||||||||||||||||
Inicializuj všechny atributy. Třída Pen je poskytnutá systémem jako součást systému obrzovky | |||||||||||||||||||||
sides ← s. | |||||||||||||||||||||
center ← c. | |||||||||||||||||||||
radius ← r. | |||||||||||||||||||||
plotter ← Pen width: 2 | |||||||||||||||||||||
analýza | |||||||||||||||||||||
center || | "Zadej centrum koordinátů polygonu." | ||||||||||||||||||||
↑ center | |||||||||||||||||||||
sides || | "Zadej počet stran poligonu." | ||||||||||||||||||||
display | |||||||||||||||||||||
plot: Ink || | "nakresli obrázek polygonu za použití specifikovaného inkoustu" | ||||||||||||||||||||
plotter penup. | "zvedni pero aby se zamezilo kreslení" | ||||||||||||||||||||
plotter goto: self center. | "vycentruj pero" | ||||||||||||||||||||
plotter up. | "nasměruj k vrchu obrazovky" | ||||||||||||||||||||
plotter go: radius. | "nastav pozici na vrchol" | ||||||||||||||||||||
plotter turn: 180 - [self cornerAngle/2]. | "nasměřuj se po straně" | ||||||||||||||||||||
plotter color: ink. | zvol barvu inkoustu | ||||||||||||||||||||
plotter pendn. | "polož pero pro umožnění kreslení" | ||||||||||||||||||||
↑ to? sedes do: | "pro každou stranu polygonu:" | ||||||||||||||||||||
[:i | plotter go: self sideLength. | "nakresli stranu" | ||||||||||||||||||||
plotter turn: 180-self cornerAngle] | "nasměřuj na další stranu" | ||||||||||||||||||||
transformation | |||||||||||||||||||||
scale: factor || | |||||||||||||||||||||
"Přizpůsob poloměr polygonu o zadaný faktor." | |||||||||||||||||||||
radius ← radius * factor | |||||||||||||||||||||
translateBy: deltaXY || | |||||||||||||||||||||
"Změň pozici polygonu o zadanou hodnotu [aPoint]" | |||||||||||||||||||||
center ← center + deltaXY | |||||||||||||||||||||
lokální metody instance | |||||||||||||||||||||
cornerAngle || | "Zadej vnitřní ůhel každého vrcholu v stupních." | ||||||||||||||||||||
↑180 - (360/sides) | |||||||||||||||||||||
sideLength || | "Zadej délku kterékoliv ze stejných stran" | ||||||||||||||||||||
12 * radius * (self cornerAngle /2) degreesToRadians cos | |||||||||||||||||||||
RegularPolygon |
Prohlížení datových struktur
Předpokládejte, že vám někdo dal program ve Smalltalku, který implementuje třídu rgularPolygon (tabulka 1), a vy se o něm chcete dozvědět více. Bylo by užitečné podívat se na skutečnou instanci pravidelného mnohoúhelníku.
Pokud proměnná trojúhelník odkazuje na pravidelný mnohoúhelník, zadáte do okna pracovního prostoru následující příkaz:
trojúhelník prohlédnout
a pak vydáte příkaz provést
(do it
) v nabídce panelu (foto 12a). Za několik sekund se na obrazovce objeví dvoupanelové "okno inspekce". Jeho záložka s názvem vám sdělí třídu kontrolovaného objektu, v tomto případě RegularPolygon. Okno je rozděleno na dvě podokna. V levém neboli proměnném podokně jsou uvedeny části pravidelného mnohoúhelníku, strany, střed, poloměr a plotr. Pravý, neboli hodnotový podokno je prázdný.
Najedete na slovo strany v proměnném podokně a klepnete na tlačítko výběru na myši. Slovo strany se zvýrazní a v podokně hodnot se objeví hodnota proměnné strany (foto 12b), v tomto případě 3. Ukážete na slovo střed a kliknete. V podokně hodnot se objeví hodnota středu (foto 12c), v tomto případě bod var>526@302</var. Podokno hodnot je závislé na podokně proměnných, protože jeho obsah je určen tím, co vyberete v podokně proměnných. Tuto závislost symbolizuje šipka na (obrázku 3).
Podíváme se na hodnotu středu. V podokně proměnných, kde je vybrána hodnota center, vyvolejte nabídku podokna a vydejte příkaz prozkoumat
(inspect
) (foto 12d). Na obrazovce se objeví další okno inspect, které ukazuje, že center je instance třídy Point (foto 12e). Nyní můžete zkoumat proměnné tohoto bodu, x a y, znovu aktivovat původní okno inspect, zavřít jedno nebo obě okna nebo pracovat v jakémkoli jiném okně. Nejste v režimu.
Procházka existujícími definicemi
Teď, když jste zkontrolovali ukázkový pravidelný mnohoúhelník, možná budete chtít zjistit, jaké metody byly definovány v jeho třídě. Jedním ze způsobů, jak to udělat, je aktivovat okno zvané "okno pro procházení" nebo "prohlížeč". Většina programátorů Smalltalku nechává prohlížeč nebo dva na obrazovce po celou dobu s oknem pracovního prostoru.
Na titulní kartě prohlížeče (foto 13a) je napsáno "Třídy", protože standardní prohlížeč umožňuje zkoumat a měnit definice všech tříd Smalltalku - tříd dodaných systémem i tříd dodaných vámi. Je snadné vytvořit omezenější prohlížeč, který chrání systém před neuváženými úpravami. Na osobním počítači si však jen ublížíte.
Prohlížeč má pět panelů. Hlavní závislosti mezi panely jsou na obrázku 4 symbolizovány šipkami. Horní řada má čtyři panely nazvané panel kategorie třídy, panel třídy, panel kategorie metody a panel metody. Velký spodní panel se nazývá panel úprav. (Po několika minutách používání systému vám bude význam jednotlivých podoken zřejmý a není nutné si pamatovat jejich odborné názvy)
Na fotografii 13a prohlížeč zobrazuje definici metody v editačním podokně. Poznáte, že metoda je verzí metody scale: třídy RegularPolygon, protože v podokně třídy je zvýrazněna třída RegularPolygon a v podokně metod je zvýrazněna metoda scale:.
Podokno kategorií metod uvádí několik skupin metod v rámci třídy RegularPolygon: inicializační, analytické, zobrazovací, transformační, testovací a soukromé metody. Můžete říci, že scale: je transformační zpráva ve třídě RegularPolygon, protože tato kategorie je zvýrazněna.
Podokno kategorií tříd uvádí několik skupin tříd, včetně čísel, souborů a grafických objektů. Můžete říci, že třída RegularPolygon je ve skupině grafických objektů, protože tato kategorie je zvýrazněna.
Předpokládejme, že se chcete podívat na jinou metodu, translateBy:. Klepněte na její název v podokně metod a její definice se okamžitě zobrazí v závislém podokně, v podokně úprav (foto 13b). Pokud se metoda, kterou chcete zobrazit, nachází v analýze kategorií metod, klikněte nejprve na název této kategorie. Ihned poté se v jejím závislém podokně, podokně metod, zobrazí seznam metod této kategorie. Nyní můžete kliknout na název požadované metody (foto 13c).
Pokud se chcete dozvědět věci o třídě jako celku, například o její nadtřídě a názvech polí, klikněte v podokně kategorie metod na "Definice třídy" a definice se zobrazí v podokně úprav (foto 13d).
Předpokládejme, že se chcete podívat na jinou třídu, například IrregularPolygon. Klepněte na její název v podokně tříd a její kategorie metod se okamžitě zobrazí v dalším podokně (foto 13e). Pokud se třída, kterou chcete zobrazit, nachází v oknech kategorií tříd, klepněte nejprve na název této kategorie. Ihned poté se v podokně tříd zobrazí seznam tříd této kategorie. Nyní můžete kliknout na název žádané třídy (foto 13f).
Následující tabulka obsahuje popis nepravidelného polygonu s následujícími atributy | |
vrcholy (vertices) | SeznamPosloupnosti Bodů (OrderCollection of Points) |
ploter (plotter) | Kreslící pero pro vyvedení obrázku na obrazovku nebo papír. |
Následující výrazy jsou příkladem vytvoření a použití instance IrregularPolygon | |
triangle ← IrregularPolygon vertices: | |
(OrderedCollection with: 2 @ 21 with: -25 @ -35 with: 52 @ -7). | |
triangle translateBy: -90 @ 60. | |
triangle plot: black. | |
triangle translateBy: 165 @ 20. | |
triangle scale: 0.6. | |
trinagle plot: gray. | "gray označuje šedou barvu" |
název třídy | IrregularPolygon |
nadtřída | Objekt |
názvy proměnných instance | vertices plotter |
zprávy a metody třídy | |
inicializace | |
vertices: aCollection center: c || | |
Vytvoření instance IrregularPolygon, jejíž střed je umístěn ve středu aktuálně aktivního okna na obrazovce displeje Screen je globální proměnná, která odkazuje na hardwarovou obrazovku displeje. | |
↑ self new vertices: aCollection center: (Screen activeWindow frame center) | |
zprávy a metody instance | |
inicializace | |
vertices: aCollection center: c || | |
Inicializace atributů. Třída Pen je v systému k dispozici jako jeden ze způsobů vedlejšího ovlivnění obrazovky. | |
vertices ← aCollection. | |
plotter ← Pen width: 2. | |
self translateBy: c - self center | |
analýza | |
center | sum | | "Souřadnice centra polygonu." |
sum ← 0@0. | |
vertices do: [ :pt / sum ← sum + pt]. | |
| sum / self sides | |
sides || | "Počet stran polygonu." |
↑ vertices size | |
zobrazení | |
plot: ink || | "Vykresli polygon za použití vybrané barvy." |
plotter penup. | "zamez vykreslování zvednutím pera" |
plotter goto: vertices last. | "umístni pero na jeden z vrcholů" |
plotter color: ink. | "zvol barvu inkoustu" |
plotter pendn. | "připrav pero ke kreslení" |
vertices do: | "pro každý vrchol" |
[:pt | plotter goto: pt] | "nakresli rovnou čáru" |
transformace | |
scale: factor | center | | |
"Změň měřítko o specifikovaný faktor." | |
center ← self center. | "centrum změny" |
vertices ← vertices collect: | "vytvoř nový seznam vrcholů" |
[ :pt | (pt - center)*factor +center] | |
translateBy: deltaXY || | |
"Změň pozici polygonu o zadanou hodnotu [aPoint]" | |
vertices ← vertices collect: [:vertex | vertex + deltaXY] | |
IrregularPolygon |
Kategorizace se používá jak na úrovni tříd, tak na úrovni metod, aby programátorovi pomohla uspořádat jeho nebo její program a aby měli v každém podokně méně možností volby. Pokud je seznam delší, než kolik se vejde do podokna, lze jej posouvat stisknutím tlačítka myši s kurzorem v rolovací liště.
Pokud chcete pouze listovat při čtení definic tříd a metod, můžete tak činit líným klikáním na tlačítko výběru s kurzorem nad každým názvem, aniž byste se dotkli klávesnice. Proto se okno nazývá prohlížeč. Prohlížeče jsou dále popsány v [referencích 6][6] a [7][7].
Znalí čtenáři si možná všimli, že šablona třídy (viz "The Smalltalk-80 System" od Learning Research Group na straně 36 tohoto čísla) prezentuje metody třídy odděleně od metod jejích instancí, zatímco prohlížeč nikoli. Tento rozdíl vyplývá z rozdílů mezi jazyky Smalltalk-80 a Smalltalk-76.
Revize definic
Pokud si prohlížíte definici metody nebo třídy v editačním okně, můžete ji revidovat pomocí standardních prostředků pro editaci textu (výběr, psaní, vyjmutí, vložení, kopírování).
Pokud chcete, můžete do definice kopírovat informace z jiných oken - včetně jiných oken prohlížeče - protože při prohlížení nejste v žádném režimu. Dokonce můžete přerušit editaci, abyste spustili jiný program, vypsali soubory na disku, nakreslili obrázek nebo dělali cokoli jiného. Prohlížeč můžete později znovu aktivovat a pokračovat v úpravách.
Když skončíte s úpravami, vyvolejte nabídku aktivního panelu a vydejte příkaz zkompilovat
(compile
) (foto 14a). Kompilace trvá několik sekund nebo méně, protože je inkrementální - to znamená, že můžete kompilovat jednu metodu po druhé. O chybě syntaxe vás kompilátor informuje vložením zprávy v místě, kde byla chyba zjištěna, a automatickým výběrem této chybové zprávy (foto 14b). Poté můžete zprávu vystřihnout nebo přepsat, provést opravu a ihned znovu vydat příkaz zkompilovat
.
Pokud začnete opravovat definici a rozmyslíte si to, můžete vyvolat nabídku panelu a vydat příkaz zrušit
(cancel
) (foto 14c). Příkaz "zrušit" znovu zobrazí poslední úspěšně zkompilovanou verzi metody (foto 14d). Pokud omylem zrušíte, stačí vydat příkaz vrátit
(undo
) a vrátit se k opravené verzi.
Přidání nových definic
Chcete-li přidat novou definici metody, vyberte kategorii metody. V podokně úprav se zobrazí šablona pro definici nové metody (foto 15a). Šablona vám připomíná požadovanou syntaxi metody.
Pomocí standardních editačních prostředků dodáte vzor zprávy, seznam proměnných a tělo metody. Jakmile je definice připravena, vydejte příkaz zkompilovat
(foto 15b).
Jakmile se kompilace podaří, selektor nové metody se automaticky přidá do abecedního seznamu v podokně metod a vzor zprávy se v editačním podokně automaticky změní na tučné písmo (foto 15c).
Nová definice třídy se přidává analogickým způsobem. Začněte výběrem kategorie třídy (foto 15d), poté vyplňte vzor pro definici nové třídy a sestavte jej (foto 15e). Lze přidávat nové kategorie a staré kategorie přejmenovávat a reorganizovat.
Testování programu
Záměrně přidáme do metody chybu a uvidíme, jak ji lze vystopovat a opravit.
Přejděte na metodu cornerAngle ve třídě RegularPolygon, vyřízněte znaky 180 -
(foto 16a) a překompilujte ji. V okně pracovního prostoru třídy RegularPolygon vyberte testovací program a vydejte příkaz "do it" (foto 16b). Místo požadovaného trojúhelníku se kvůli chybě vnesené do výpočtu úhlu vykreslí otevřený trojúhelník.
Body přerušení
Chceme-li chybu vystopovat, nastavme bod přerušení v metodě cornerAngle. Pomocí standardních editačních prostředků přidáme příkaz:
self notify:
před příkaz return
(foto 16c). Nyní znovu spusťte testovací případ. Když počítač narazí na bod přerušení, objeví se uprostřed obrazovky nové okno. Říká se mu "oznamovací okno" (foto 16d). V záhlaví oznamovacího okna je napsáno chystám se vypočítat ůhel (about to calculate angle).
Oznamovací okno má jeden panel, panel zásobníku. Zobrazuje se v něm RegularPolygon>> cornerAngle (tj. třída a metoda, ve které došlo k bodu přerušení). Vyskakovací nabídka tohoto podokna nabízí několik příkazů, včetně stack
a proceed
(foto 16e).
Příkaz pokračovat
(proceed
) zavře oznamovací okno a pokračuje ve vykonávání od bodu přerušení. Pokud v našem příkladu vydáme příkaz proceed
, dojde okamžitě k opětovnému setkání se stejným bodem přerušení, protože metoda cornerAngle je během provádění testovacího programu použita několikrát.
Co dokáže zobrazit oznamovací okno
Příkaz stack
rozšíří obsah podokna o zprávy, které byly odeslány, ale ještě na ně nepřišla odpověď (foto 17a). Prozrazuje, že odesílatelem zprávy cornerAngle byl příkaz RegularPolygon>>plot:.
Vyskakovací nabídka oznamovacího okna nabízí obvyklý repertoár, včetně příkazů zavřít
a orámovat
(foto 17b). Pokud by byl vydán příkaz zavřít
, okno notifikace by zmizelo z obrazovky a provádění testovaného programu by bylo přerušeno. Vydejme místo toho příkaz frame
. Okno notifikace se zvětší a získá celkem šest oken (foto 17c). Jejich vzájemné závislosti jsou znázorněny na (obrázku 5).
Vlevo nahoře je podokno zásobníku zachované z dřívějška. Pravé horní podokno je podokno pro úpravy. Pokud v podokně zásobníku vyberete položku RegularPolygon >> plot:, objeví se v podokně úprav definice její metody. Definici můžete procházet a dokonce ji tam upravovat a překompilovat jako v prohlížeči.
Dva prostřední panely jsou panely "kontextová proměnná" a "kontextová hodnota". Jsou analogické dvěma podoknům okna inspekce, ale v tomto případě jsou proměnnými, které můžete zkoumat, argumenty a lokální proměnné metody vybrané v podokně zásobníku. Klepnutím na inkoust (ink) v podokně proměnných zobrazíte jeho hodnotu v podokně hodnot.
Dva spodní podokna jsou podokna instance variable a instance value. Jsou rovněž analogické podoknům okna inspect. Umožňují zkoumat proměnné instance příjemce zprávy vybrané v podokně zásobníku. Kliknutím na střed se v podokně hodnot zobrazí jeho hodnota.
Do podoken hodnot můžete zadávat příkazy a provádět je pomocí funkce do it
(foto 17d). Budou provedeny v kontextu metody vybrané v podokně zásobníku - to znamená, že se mohou odkazovat na argumenty a lokální proměnné metody a na proměnné instance.
Debugování
Mohli byste postupně procházet provádění metody v podokně úprav. V podokně úprav byste vybrali postupně jeden příkaz a vydali příkaz "proveď". Abychom podstrčenou chybu uzavřeli, můžeme vyhodnotit self comerAngle, výraz na posledním řádku metody. Vybereme tento výraz a vydáme příkaz do it
(foto 18a). Odpověď, 120, se zobrazí vpravo od otázky (foto 18b). Protože vnitřní úhel pravidelného trojúhelníku je 60 stupňů, našli jsme nasazenou chybu.
Nyní v podokně zásobníku vyberte příkaz RegularPolygon>>comerAngle. Definice její metody včetně námi nastaveného bodu přerušení se objeví v podokně úprav (foto 18c). Pomocí standardních úprav odstraníme bod přerušení, opravíme chybu a znovu zkompilujeme podokno úprav (foto 18d).
K libovolné úrovni zásobníku se dostanete náhodným kliknutím na ni v podokně zásobníku.
Obnovení
Po rekompilaci metody můžete obnovit její provádění od začátku libovolné metody na zásobníku pomocí příkazu restartovat
v nabídce podokna zásobníku (foto 19a). To umožňuje pokračovat v testu (foto 19b), aniž by bylo nutné začínat znovu od okna pracovního prostoru. Obnovení provádění po opravě je užitečná možnost, když se u dobře běžícího programu vyskytne drobná chyba.
Celý zásobník testovaného procesu byl uložen do okna oznámení. Když se objeví okno oznámení, zbytek systému není preemptován. Když se zobrazí oznamovací okno, nemusíte se jím zabývat. Můžete pracovat v jiných oknech a vrátit se k němu později, způsobit vytvoření dalších oznamovacích oken nebo trochu pracovat v oznamovacím okně a pak dělat něco jiného. Neexistují žádné režimy.
Oznamovací okno o chybách
Oznamovací okna o chybách se neliší od bodů přerušení s tím rozdílem, že pokud mají být "neopravitelné", jsou naprogramovány jako:
vlastní chyba: "chyba cokoliv".
(self error: "error whatever"
)
Pokud uživatel po chybě "pokračuje" z oznamovacího okna, testovaný proces je ukončen.
Nejčastěji se vyskytující chybou Smalltalku je "Zpráva není pochopena". Vyskytuje se tehdy, když je objektu zaslána metoda a třída tohoto objektu ani žádná z jeho nadtříd nedefinuje metodu pro příjem této zprávy. Upravme metodu sideLength (foto 20a) tak, aby místo cos posílala zprávu cosine. Po rekompilaci této metody (foto 20b) a opětovném spuštění testovacího programu se objeví okno s oznámením (foto 20c), že třída Real ani její nadtřídy nedefinují cosine.
Ve většině programovacích systémů jsou při kompilaci vydávány ekvivalentní chybové stavy jako "nedeklarovaná procedura" a "špatný počet argumentů". Smalltalk nemůže tyto podmínky odhalit až za běhu, protože proměnné nejsou deklarovány co do typu. V době běhu může být objekt, kterému byla odeslána zpráva cosine, instancí třídy, která skutečně definovala metodu s tímto názvem.
Kontrola typů
Když programujeme v jazycích, jako je Pascal, jsme závislí na kontrole typů, která zachytí chyby při volání procedur v rané fázi procesu vývoje softwaru. Na oplátku musíme věnovat více času udržování typových deklarací a ztrácíme velmi silnou možnost definovat "generické" nebo "polymorfní" procedury se stejným jménem, ale s parametry různých typů.
Kontrola typů je ve většině systémů důležitá ze čtyř důvodů, z nichž žádný není ve Smalltalku příliš důležitý:
-
Bez kontroly typů může program ve většině jazyků za běhu záhadným způsobem "spadnout". I s typovou kontrolou může většina programových systémů spadnout kvůli neinicializovaným proměnným, visícím referencím atd. Jazyky s touto vlastností se někdy nazývají "nebezpečné". Příklady nebezpečných jazyků jsou Pascal, PL/1 a C. Příklady poměrně bezpečných jazyků jsou BASIC a LISP. Smalltalk je bezpečný jazyk. Nelze jej zlikvidovat běžným programováním. Zejména nikdy nespadne, když dojde k "neshodě typů". Pouze hlásí chybu Zpráva nebyla pochopena a pomáhá programátorovi rychle najít a opravit problém prostřednictvím oznamovacího okna.
-
Ve většině systémů je cyklus editace-kompilování-odstraňování chyb natolik zdlouhavý, že včasné odhalení chyby je nepostradatelné. Ve Smalltalku jsou typové chyby nalezeny již na začátku testování spolu s chybami v rozsahu hodnot a dalšími chybami.
-
Typové deklarace pomáhají dokumentovat programy. To je pravda, ale dobře zvolené názvy proměnných a relevantní komentáře poskytují konkrétnější informace než deklarace typu. Špatný dokumentátor může v silně typovaném programu předat stejně málo informací jako v netypovaném programu.
-
Většina kompilátorů dokáže generovat efektivnější objektový kód, pokud jsou typy deklarovány. Stávající implementace Smalltalku nemohou využít výhod typových deklarací. Očekáváme, že budoucí verze budou mít tuto možnost. V té době mohou být deklarace typů do jazyka přidány. Pravděpodobně je bude dodávat spíše systém než uživatel, a to pomocí techniky analýzy programu zvané "typová inference".
Projektová okna
Přestože překrývající se okna umožňují udržovat na obrazovce stav několika úloh najednou, může se někdy stát, že budete pracovat na několika zcela odlišných projektech, z nichž každý zahrnuje několik úloh. Smalltalk vám umožňuje mít pro každý projekt jinou "pracovní plochu". Na každé desce stolu jsou okna pro úlohy, které se daného projektu týkají. Abyste mohli lépe přecházet z jedné desky stolu na druhou, může mít deska stolu jedno nebo více oken projektu, která vám ukazují další dostupné desky stolu a umožňují vám přepnout se na jednu z nich (foto 21)*.
(pozn.př.: myšleno doslova "desk top")
Ukládání programů
V neintegrovaných systémech vytváříte program pomocí standardních prostředků pro úpravu textu. Poté můžete pomocí standardních obslužných programů získat výpis programu na papír, zálohovat program na jiné médium a předat program dalším osobám. V integrovaném systému musí být ekvivalentní možnosti zajištěny v rámci samotného systému. Některé z možností Smalltalku, které umožňují ukládat programy, jsou stručně popsány níže.
Jedním z důležitých prostředků je snímek systému (foto 22a). Celý stav prostředí Smalltalku - včetně definic tříd a metod, datových objektů, pozastavených procesů, oken na obrazovce a desek stolu projektu - lze na okamžik zmrazit a uložit na sekundární paměť. Snímek lze později obnovit a pokračovat v práci. Lidé, kteří znají sysout
v InterLISP nebo koncept pracovního prostoru v APL, pochopí přínos tohoto zařízení.
Další způsob umožňuje vypsat definice jedné nebo více metod nebo tříd na tiskárně. Souvisejícím zařízením je filin/filout
. Zpráva zapsat
(filout
) (foto 22b) zapíše ASCII reprezentaci jedné nebo více definic do běžného textového souboru. Definice pak lze přenést do jiného prostředí Smalltalku pomocí zprávy načíst
(filin
) v tomto prostředí.
Často se stává, že uživatel během programování změní řadu definic metod, které jsou roztroušeny v mnoha třídách, a nemůže si vzpomenout, které z nich byly změněny. Systém uchovávaní změn automaticky uchovává záznamy o tom, které definice se změnily v každém projektu, a usnadňuje uživatelům, aby tyto definice na konci relace zapsali (uložili).
Implementace prostředí
Protože Smalltalk je integrované prostředí, jsou všechna zařízení popsaná v tomto článku implementována ve vysokoúrovňovém jazyce, včetně editace bez modelů, oken, překladače a oznamovacího mechanismu. To bylo možné díky tomu, že Smalltalk reprezentuje vše, včetně dynamického stavu vlastních procesů, jako objekty, které si pamatují svůj vlastní stav a kterým mohou jiné objekty posílat zprávy. Pomocí prohlížeče můžete zkoumat a (opatrně) měnit definice pomůcek pro vývoj softwaru.
V implementaci Smalltalku-76 jsou třídy InspectW/indow, BrowseWindow a NotifyWindow drobnými podtřídami třídy PanedWindow, která definuje jejich společné chování. Podobně třídy StackPane, VariablePane, ValuePane atd. jsou všechny drobnými podtřídami třídy ListPane. Nadtřída definuje společné chování, jako je posouvání a výběr položek.
Pokud vám někdo ukáže systém, o kterém tvrdí, že je "Smalltalk", zjistěte, zda existují pomůcky pro vývoj softwaru a zda jsou naprogramovány jako definice tříd ve vysokoúrovňovém jazyce. Pokud ne, systém není bona fide.
Závěry
Programovací prostředí Smalltalku je reaktivní. To znamená, že uživatel mu říká, co má dělat, a ono reaguje, nikoli naopak. Aby uživatel mohl přepínat mezi úlohami, je stav úloh uchováván v okamžitě přístupných oknech, která se na deskách stolů překrývají. Aby měl uživatel v každém okamžiku maximální svobodu volby, režimy se v uživatelském rozhraní vyskytují jen zřídka. Výsledkem této organizace je, že úkoly, včetně úkolů vývoje softwaru, lze provádět s větší rychlostí a menší frustrací, než se obvykle vyskytuje v počítačových systémech.
References
[1]: Sneeringer, J. "User-Interface Design for Text Editing: A Case Study." Software— Practice and Experience 8, pages 543 thru 557, 1978.
[2]: Swinehart, D C (thesis). "Copilot: A Multiple Process Approach to Interactive Programming Systems." Stanford Artificial Intelligence Laboratory Memo AIM-230, Stanford University, July 1974.
[3]: Kay, A and A Goldberg. "Personal Dynamic Media." Computer, March 1977 (originally published as Xerox PARC Technical Report SSL-76-1, March 1976, out of print).
[4]: English, W, D Engelbart, and M Berman. "Display-Selection Techniques for Text Manipulation." IEEE Transactions on Human Factors in Electronics, volume 8, number 1, pages 21 thru 31, 1977.
[5]: Card, S, T Moran, and A Newell. "The Keystroke-Level Model for User Performance Time with Interactive Systems." Communications of the ACM, volume 23, number 7, July 1980.
[6]: Goldberg, A and D Robson. "A Metaphor for User-Interface Design." Proceedings of the Twelfth Hawaii International Conference on System Sciences, volume 6, number 1 , pages 148 thru 157, 1979.
[7]: Borning, A. "ThingLab — A Constraint-Oriented Simulation Laboratory." To appear in ACM Transactions on Programming Languages and Systems (originally published as Stanford Computer Science Report STAN-CS-79-746 and Xerox PARC Technical Report SSL-79-3, July 1979, out of print).
Your e-mail address will not be published. Comments are moderated.