smalltalk programa§£o orientada a objetos. smalltalk a origem do smalltalk

Download Smalltalk Programa§£o Orientada a Objetos. Smalltalk A Origem do Smalltalk

Post on 18-Apr-2015

120 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Slide 1
  • Smalltalk Programao Orientada a Objetos
  • Slide 2
  • Smalltalk A Origem do Smalltalk
  • Slide 3
  • A primeira linguagem a incorporar facilidades para definir classes de objetos genricos na forma de uma hierarquia de classes e sub-classes foi a linguagem Simula [Dahl66], [Birtwistle et al.73]. Simula foi idealizada em 1966, na Noruega, como uma extenso da linguagem ALGOL 60. Uma classe em Simula um mdulo englobando a definio da estrutura e do comportamento comuns a todas as suas instncias (objetos). Como o nome indica, uma linguagem adequada programao de Simulaes de sistemas que podem ser modelados pela interao de um grande nmero de objetos distintos.
  • Slide 4
  • A Origem do Smalltalk As idias de Simula serviram de base para as propostas de utilizao de Tipos Abstratos de Dados [Liskov e Ziller 74], e tambm para Smalltalk. Smalltalk foi desenvolvida no Centro de Pesquisas da Xerox durante a dcada de 70 [Goldberg83], e incorporou, alm das idias de Simula, um outro conceito importante, devido a Alan Kay, um de seus idealizadores: o princpio de objetos ativos, prontos a "reagir" a "mensagens" que ativam "comportamentos" especficos do objeto. Ou seja, os objetos em Smalltalk deixam de ser meros "dados" manipulados por "programas", e passam a ser encarados como "processadores idealizados" individuais e independentes, aos quais podem ser transmitidos comandos em forma de "mensagens".
  • Slide 5
  • A Origem do Smalltalk Alm da Xerox, que criou a ParcPlace Systems especialmente para comercializar Smalltalk-80 e seus sucedneos (ObjectWorks), a Digitalk lanou em 1986 uma verso de Smalltalk para ambiente DOS, e mais recentemente a verso para Windows, o que contribuiu para uma maior difuso da linguagem [Digitalk].
  • Slide 6
  • A Origem do Smalltalk Smalltalk, assim como outras linguagens orientadas para objetos, tem sido usada em aplicaes variadas onde a nfase est na Simulao de modlos de sistemas, como automao de escritrios, animao grfica, informtica educativa, instrumentos virtuais, editores de texto e bancos de dados genricos, etc. Tais aplicaes diferem substancialmente daquelas em que a nfase est na resoluo de problemas atravs de algortmos, tais como problemas de busca, otimizao e resoluo numrica de equaes. Para essas aplicaes, mais adequado o uso de linguagens algortmicas convencionais, como Pascal, Algol e Fortran.
  • Slide 7
  • Smalltalk Classes, Objetos, Mtodos e Mensagens
  • Slide 8
  • Em Smalltalk, assim como em outras Linguagens Orientadas para Objetos, no existe a mesma distino conceitual entre "programas" e "dados", como nas linguagens algortmicas tradicionais. Nestas, toda a ao concentra-se no programa, que contm a sequncia de instrues, enquanto os dados so passivos e atuam como parmetros ou argumentos das instrues.
  • Slide 9
  • Classes, Objetos, Mtodos e Mensagens Em Smalltalk a ao reside nos objetos do sistema, onde cada objeto constitui uma espcie de cpsula englobando no s uma estrutura de dados, mas tambm um conjunto de rotinas associadas. Cada objeto simula um conceito ou abstrao, e pode "reagir" a mensagens que recebe e que fazem parte do seu protocolo de comunicao com os demais objetos do sistema. Ao reconhecer uma mensagem, o objeto ativa uma das rotinas de seu repertrio particular (um mtodo), que descreve o comportamento do objeto associado a essa mensagem.
  • Slide 10
  • Classes, Objetos, Mtodos e Mensagens Mais exatamente, cada objeto uma instncia de sua classe. a classe que contm a descrio da representao interna e dos mtodos comuns a todas as suas instncias. Cada instncia da classe, por sua vez, possui sua prpria memria privativa (seu estado interno) onde ficam armazenados os valores de seus componentes, que represntam suas caractersticas individuais.
  • Slide 11
  • Smalltalk Variveis de Instncia
  • Slide 12
  • Um objeto sempre uma instncia de alguma classe. Cada instncia possui uma estrutura onde seu estado pode ser armazenado. Em Smalltalk uma instncia pode possuir componentes nomeados (semelhante a campos de registros, em Pascal), pode possuir componentes acessveis por meio de ndices, ou pode ter uma estrutura mista. Em todos os casos, os valores dos componenes so referncias (apontadores) para outros objetos, a menos de objetos primitivos como nmeros, caracteres e booleanos.
  • Slide 13
  • Variveis de Instncia Os componentes nomeados so chamados de variveis de instncia. A classe Point, por exemplo, possui duas variveis de instncia para representar as suas coordenadas cartesianas, de nomes x e y. J a classe Array s possui componentes indexveis. Outras classes podem ter variveis de instncia e tambm ser acessadas por meio de ndices
  • Slide 14
  • Variveis de Instncia Para ilustrar, suponha que as classes Nmero, Ponto e Retngulo estejam implementadas (na verdade, essas classes so parte integrante de Smalltalk, de nomes Number, Point e Rectangle. Neste texto, por facilidade, sero usados os termos em portugus). Como visto acima, cada instncia de Ponto representada por duas instncias de Nmero, suas coordenadas x e y (chamamos uma instncia de Ponto por "um Ponto", e uma instncia de Nmero por "um Nmero").
  • Slide 15
  • Variveis de Instncia Sejam p1 e p2 dois Pontos, cujas coordenadas so, respectivamente, (2,3) e (6,6), como mostra a figura abaixo: Nesta figura adotada a conveno de Smalltalk, com a coordenada y aumentando para baixo, que consistente com a disposio do texto numa pgina e com a varredura de tela
  • Slide 16
  • Variveis de Instncia Na definio da classe Retngulo, a estrutura de dados de cada instncia formada por um par de Pontos, o canto superior esquerdo do Retngulo (origin) e o seu canto inferior direito (corner). Poderemos ter, portanto, um Retngulo onde a varivel origin o Ponto p1 e a varivel corner o Ponto p2, como abaixo:
  • Slide 17
  • Smalltalk Criando Pontos e Retngulos
  • Slide 18
  • Um Ponto com coordenadas x e y pode ser criado enviando-se ao Nmero x a mensagem @ y. A expresso abaixo cria um Ponto e faz a varivel p1 referenci-lo: p1 := 2 @ 3 Dizemos que o Nmero 2 reage mensagem @ 3, e responde com uma nova instncia de Ponto com as coordenadas 2 e 3.
  • Slide 19
  • Criando Pontos e Retngulos Da mesma forma, um Retngulo como na figura acima pode ser criado enviando-se ao Ponto p1 a mensagem corner: p2. Na expresso abaixo, a varivel ret passa a referenciar um novo Retngulo: ret := p1 corner: p2 ou, diretamente, ret := 2 @ 3 corner: 6 @ 6
  • Slide 20
  • Criando Pontos e Retngulos Podemos a seguir enviar outras mensagens ao Retngulo ret que sejam prprias do protocolo da classe Retngulo. Por exemplo, Retngulos reagem mensagem containsPoint: p, onde p um Ponto, retornando o valor true (verdade) caso o Ponto p esteja contido no seu interior, ou false (falso) em caso contrrio, como na expresso abaixo: ret containsPoint: 4 @ 4 Nesse caso, o Retngulo ret retorna o objeto true. Note que, em Smalltalk, true tambm um objeto, uma das duas instncias da classe Boolean.
  • Slide 21
  • Smalltalk Mensagens de Classe
  • Slide 22
  • A linguagem Smalltalk foi desenvolvida com a preocupao de criar um ambiente de desenvolvimento e operao de software totalmente uniforme. Essa uniformidade foi sendo implementada ao longo das diversas verses (Smalltalk-72, Smalltalk-76, Smalltalk-80) e foi completada com a verso Smalltalk-80. Todo processamento em Smalltalk obedece ao mesmo paradigma de objetos e mensagens, seja para programar uma aplicao, utilizar funes do sistema, ou usar uma aplicao qualquer.
  • Slide 23
  • Mensagens de Classe Seja, por exemplo, a criao de instncias de uma determinada classe. Nos exemplos da sesso anterior, instncias das classes Ponto e Retangulo foram criadas atravs do envio de mensagens a objetos. Mas a forma mais geral de criar instncias de uma classe enviar uma mensagem especfica prpria classe. Isso s possvel porque classes so tambm objetos e, portanto, obedecem ao mesmo formalismo de reao a mensagens. A mensagem padro para se criar uma nova instncia de uma classe C qualquer new, como nas expressoes abaixo: C new x := C new
  • Slide 24
  • Mensagens de Classe A classe C reage mensagem e cria uma nova instncia de si mesma, retornando uma referncia a ela. Na segunda expresso, a varivel x passa a referenciar essa nova instncia. Os componentes de instncias criadas com essa mensagem so inicializados com uma referncia ao objeto nulo nil. Esse objeto a nica instncia da classe UndefinedObject. Como objeto, toda classe tambm instncia de alguma outra classe. Essa classe normalmente uma sub-classe da classe Behavior, ou seja, Behavior contm o protocolo e a descrio da estrutura de dados comuns a todas as classes do sistema. Por exemplo, a mensagem new faz parte do protocolo da classe Behavior.
  • Slide 25
  • Mensagens de Classe Em muitos casos conveniente para uma classe ter uma estrutura de dados, mensagens e mtodos especficos para ela. Os mtodos especficos referem-se normalmente inicializao de suas instncias de forma particular, e suas estruturas podem conter informaes que sejam comuns a todas as suas instncias. Por exemplo, a classe Date a classe que define o protocolo para instanciar, comparar e computar datas diversas. Essa classe reage mensagem today respondendo com uma instncia (uma data) com o valor da data de hoje, como em: d := Date