Organização do Ambiente de Execução para Linguagens OO • Objeto: – Grupo de variáveis de instância, aos quais métodos de instância estão atachados; • Variável de Instância: – Componente de um objeto particular; • Método de Instância: – Operação nomeada, ligada a um objeto particular que acessa suas variáveis de instância locais; • Classe de Objetos: – Família de objetos com variáveis de instância similares e métodos idênticos; Organização do Ambiente de Execução para Linguagens OO • Linguagens OO puras: – Todas as variáveis de instâncias são privadas; – Somente métodos podem acessá-las; – Na prática: existências de variáveis públicas; • Chamada de método de instância: – E0.I(E1, ..., En); • E0: objeto receptor; • I: método de instância do objeto; • E1, ..., En: argumentos; Organização do Ambiente de Execução para Linguagens OO • Class Point { protected int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public void move(int dx, int dy){ this += dx; this +=dy; } public float area(){ return 0.0; } public float dist(Point that) { int dx = this.x – that.x; int dy = this.y – that.y; return Math.sqrt(dx*dx + dy*dy) } } Organização do Ambiente de Execução para Linguagens OO Classe de Objeto Point Point constructor (1) move method (2) area method (3) dist method (4) Organização do Ambiente de Execução para Linguagens OO Objeto Point class tag x y Classe de Objeto Point Organização do Ambiente de Execução para Linguagens OO Point p = new Point(2,3) Point q = new Point(0,0) p.move(1,1) p q class tag x y Classe de Objeto Point class tag x y Organização do Ambiente de Execução para Linguagens OO q = p p q class tag x y Classe de Objeto Point class tag x LIXO y Organização do Ambiente de Execução para Linguagens OO • Chamada a E0.I(E1, ..., En) – Endereço do método é encontrado seguindo-se o ponteiro da classe de objeto (class-tag) e usando o deslocamento apropriado; – Traduzido para I(E0, E1, ..., En); • O objeto é passado como argumento para a chamada do método, sendo associado ao nome this; • E0.I(this, a1, ..., an); Organização do Ambiente de Execução para Linguagens OO • Sub-classes: – Seja C uma classe de objetos; – Uma sub-classe S da classe C é uma família de objetos similares aos objetos de C, porém com: • Variáveis de instância extra; • Métodos adicionais; • Métodos substituídos. – Objetos S podem ser tratados como objetos C; • Ignorando suas variáveis e métodos particulares; • Porém, considerando seus métodos substituídos; – Herança simples; Organização do Ambiente de Execução para Linguagens OO • Class Circle extends Point { protected int r; public Circle(int x, int y, int r) { this.x = x; this.y = y; this.r = r; } public void radius(){ return this.r; } public double area(){ double pi = 3.1416; return pi * this.r * this.r; } } Organização do Ambiente de Execução para Linguagens OO • Class Box extends Point { protected int w, d; public Box(int x, int y, int w, int d) { this.x = x; this.y = y; this.w = w; this.d = d; } public void width(){ return this.w; } public void depth(){ return this.d; } public double area(){ return (double) (this.w * this.d); } } Organização do Ambiente de Execução para Linguagens OO Circle Classe de Objeto Circle constructor (5) move method (2) area method (7) dist method (4) radius method (6) Organização do Ambiente de Execução para Linguagens OO Box Classe de Objeto Box constructor (8) move method (2) area method (11) dist method (4) width method (9) depth method (10) Organização do Ambiente de Execução para Linguagens OO class tag Classe de Objeto Circle x y r Objeto Circle Organização do Ambiente de Execução para Linguagens OO class tag Classe de Objeto Box x y Objeto Box w d Organização do Ambiente de Execução para Linguagens OO int s = 4; Point p = null; Circle c = new Circle(0, 3*s, s); Box b = new Box(0,s,2*s,2*s); p c b class tag Classe de Objeto Circle x 0 y 12 r 4 class tag Classe de Objeto Box x 0 y 4 w 8 d 8 Organização do Ambiente de Execução para Linguagens OO p = c p.move(20,20) p c b class tag Classe de Objeto Circle x 20 y 32 r 4 class tag Classe de Objeto Box x 0 y 4 w 8 d 8