Atributos e Métodos Restrições de Acesso Encapsulamento Herança.

Slides:



Advertisements
Apresentações semelhantes
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Advertisements

JAVA Orientação a Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Java Kickstart, day 2 Semelhanças com linguagem C.
Atributos e Métodos Estáticos
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.
Conceitos de OO em Java Parte I
Operador Condicional (? :). Operador Condicional Operador ternário que pode ser utilizado no lugar de uma instrução if...else.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
1 Interface (o termo) » Interface (a palavra reservada): Java estendeu o conceito de interfaces à um nível ainda mais flexível que permite construir entidades.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
CLASSES EM JAVA Dilvan Moreira (baseado no livro Big Java)
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Programação em Java Tratamento de Exceções Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel.
Linguagens de Programação Conceitos e Técnicas Expressões Prof. Isabel Cafezeiro
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Classes Objetos Atributos Métodos Coletor de Lixo (Garbage Collector ) Confraria do Java Nivelamento. Caroline, Marcelo e Luiz 12/05/2007.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal
Estruturas de Dados Aula 2: Estruturas Estáticas
Relacionamentos Avançados do Modelo Entidade-Relacionamento
Polimorfismo e suas aplicações em C++.
Introdução OO.
Análise e Projeto de Sistemas II
Curso básico de linguagem Java
TQS - Teste e Qualidade de Software (Software Testing and Quality) Introdução a testes unitários automatizados com JUnit.
Introdução Java.
PROGRAMAÇÃO ORIENTADA A OBJETO - JAVA
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Tema 4 - Modelagem ER: Técnicas e Ferramentas
Linguagem Orientada a Objetos 2
Projeto de PLP (2006.1) Extensão da Linguagem OO1
Java: Interfaces Alcides Calsavara.
Programador/a de Informática
Criação e manipulação de objetos
Unidade V – Herança e Ligação Dinâmica
Programação Orientada a Objetos
4 CONCEITOS BÁSICOS EM POO
Programação Orientada a Objetos

Modelagem de Objetos de Domínio com Diagrama de Classes
Unidade 2 Modelo Conceitual
Unidade VI – Exceções e Interfaces
Técnicas de Programação
MER – Modelo de Entidade Relacionamento
Programação Orientada a Objetos*
Rosemary Silveira Filgueiras Melo
Pacotes Servem para organizar o código, por exemplo, agrupar classes correlatas. Vamos supor uma classe Ponto2D pertencente ao pacote formas. A classe.
Programação Orientada a Objetos*
3.2 Sobrecarga de Métodos (Overloading)
Rosemary Silveira Filgueiras Melo
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
3.1.7 Variáveis de Classe e Instância
Programação Orientada a Objetos
Laboratório I Mateus Raeder.
Rosemary Silveira Filgueiras Melo
Estruturas de Dados em C
Alexandre Mota Análise do Sistema Alexandre Mota
Paradigma de Orientação a Objetos
Tipos Primitivos de Dados
Compilação de Linguagens OO
RESULUÇÃO DOS EXERCÍCIOS,
A interface java.util.List
Programação Orientada a Objetos
RESULUÇÃO DOS EXERCÍCIOS E
Programação de Computadores II
Programação de Computadores II
Transcrição da apresentação:

Atributos e Métodos Restrições de Acesso Encapsulamento Herança

Atributos e Métodos Restrições de Acesso Encapsulamento

3 Variáveis – Classe, Instância e Método Tipos de variáveis estudadas –Variável local de método –Variável de instância diferença ?

4 public class Circulo { public int numcirc = 0; // atributo sem restrição de uso private double x, y, r; public Circulo ( double a, double b, double c) { x = a; y = b; r = c; numcirc++; } public double calcularArea ( ) { double calc = * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); System.out.println("Numero de circulos = " + umcirculo.numcirc); } Exemplo

5 public class Circulo { private int numcirc = 0; private double x, y, r; public Circulo ( double a, double b, double c) { x = a; y = b; r = c; numcirc++; } public double calcularArea ( ) { double calc = * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); } Variável de instância Variáveis de instância Variável local de método Exemplo

6 Variáveis de Instância: há uma cópia para cada instância da classe public class Circulo { private int numcirc = 0; private double x, y, r; Circulo (double x, double y, double r) { this.x = x; this.y = y; this.r = r; numcirc ++; } Variáveis de Instância

7 public class Circulo { private int numcirc = 0; private double PI = ; private double x, y, r; public Circulo ( double a, double b, double c) { this.x = a; this.y = b; this.r = c; numcirc ++; } public double calcularArea ( ) { double calc = PI * r * r; return calc; } public static void main (String[ ] args) { Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.calcularArea ( )); }

8 Restrições de Acesso Já vimos que: –uma classe define atributos, métodos e construtores dessa classe –objetos podem ser criados durante a execução de um programa –cada objeto contém variáveis de instância definidas na classe e pode receber chamadas de métodos declarados na sua classe Alguns modificadores de acesso podem ser especificados em declarações de classes, atributos e métodos

9 Restrições de Acesso Java usa modificadores de controle de acesso para especificar o nível de visibilidade de um método ou uma variável para as outras classes Podem ser declarados quatro tipos de modificadores de acesso: –public –private –protected –default (ou sem modificador) Modificadores de acesso podem ser aplicados na definição de classes, nos atributos e nos métodos

10 Restrições de Acesso public –Pode ser acessado a partir de qualquer outra classe –É a condição de menor restrição possível protected –Pode ser acessado por métodos de classe que o contém, assim como por qualquer classe que tenha sido derivada dessa classe (sub-classes) mesmo que esteja em outro package private –É privativo da classe que o contém e seu uso não é permitido a qualquer outra classe sem modificador –Uso permitido dentro da classe que o contém, assim como dentro de qualquer classe que tenha sido derivada dessa classe, que esteja no mesmo package –Este é o modificador default, isto é, aquele que é assumido se nenhum modificador for explicitamente especificado

11 Visibilidade Pacotes (package): unidades de compilação distintas, usadas para divisão de programas em partes organizadas hierarquicamente, que possibilita o controle da visibilidade de nomes em programas Acesso permitido na publicsem nenhum modificador protectedprivate mesma classe SIM subclasse do mesmo pacote SIM NÃO classe do mesmo pacote SIM NÃO subclasse em outro pacote SIMNÃOSIMNÃO classe em outro pacote SIMNÃO

12 Encapsulamento Objetivo: “ocultar” os detalhes de implementação do mundo externo ao objeto e restringir o acesso a atributos e métodos

13 Vantagens do Encapsulamento Segurança no acesso ao objeto Maior consistência no estado interno, pois evita alteração incorreta dos atributos Maior facilidade de modularização A comunicação entre um objeto e o mundo externo é feita através de troca de mensagens Uma mensagem é tratada por um método adequado da classe representante do objeto

Operações de Abstração

15 Operações de Abstração – Conceitos As operações de abstração mostram como o ser humano mentaliza, organiza e modela o mundo ao seu redor Algumas operações de abstração relevantes para a Modelagem Conceitual são Classificação / Instanciação Generalização / Especialização Agregação / Decomposição Associação

16 Generalização Processo pelo qual os caracteres comuns a vários objetos são identificados Pode resultar na formação de um novo conceito ou idéia ou na extensão de um conceito já determinado, que passa a cobrir uma nova classe de exemplos Especialização Processo de divisão do trabalho encarado do ângulo individual Especializar é mencionar ou tratar à parte, de modo especial; particularizar, singularizar, especificar

17 Estudante GENERALIZAÇÃO Classes Classe Estudante de graduaçãoEstudante de pós-graduação Generalização

18 Especialização ESPECIALIZAÇÃO Classe Mamífero Baleia

19 Generalização/Especialização Classe Geral Pessoa Classes Especializadas Relação de pertinência: É UM TIPO DE Estudante Professor Funcionário Diretor

20 Generalização/Especialização Classe mais geral Classe mais específica Notação UML

21 Operações de Abstração Relevantes para a Modelagem Conceitual Generalização Operação de análise de um conjunto de classes que identifica características comuns a todas elas, tendo como objetivo a definição de uma classe mais genérica, a qual especificará estas características comuns Especialização Operação em que, a partir de uma classe, identifica-se uma ou mais sub-classes, cada uma especificando características adicionais em relação a classe mais geral

22 Operações de Abstração Relevantes para a Modelagem Conceitual Generalização / Especialização Se, a partir de um conjunto de classes, pode-se identificar características que são comuns a elas, então uma nova classe, mais geral, pode ser definida –a partir de duas classes abstrai-se uma classe mais genérica –as sub-classes satisfazem todas as propriedades das classes das quais elas constituem especializações –deve existir pelo menos uma propriedade que distingue duas classes especializadas

Herança

24 Herança subclasse superclasse Herança é um relacionamento do tipo generalização/especialização, onde uma classe – a subclasse – pode ser derivada de outra classe mais geral – a superclasse – absorvendo todas as suas características fundamentais e podendo adicionar outras novas características, de tal modo a torná-la mais especializada

25

26

27

28

29

30 Superclasse Implementação da Superclasse Funcionario public class Funcionario { String nome; String rg; double salario; public Funcionario (String nomef, String ident, double sal) { this.nome = nomef; this.rg = ident; this.salario = sal; } public void aumentar (double valor) { salario = salario + valor; } public double pagar ( ) { return salario; }

31 Superclasse Implementação da Superclasse Funcionario public class Funcionario { protected String nome; protected String rg; protected double salario; public Funcionario (String nomef, String ident, double sal) { this.nome = nomef; this.rg = ident; this.salario = sal; } public void aumentar (double valor) { salario = salario + valor; } public double pagar ( ) { return salario; } Construtor da classe Método da classe Métodos da classe Atributos

32 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; }

33 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Palavra reservada para designar que uma classe é sub-classe de uma outra classe; no caso, Chefe é uma sub-classe derivada de Funcionário

34 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Invocação do método construtor da super- classe Funcionário

35 Subclasse Implementação da Subclasse Chefe public class Chefe extends Funcionario { double gastos_extra; double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); gastos_extra = gastos; adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe; } Atributos adicionais Construtor da subclasse Chefe Invocação do construtor da superclasse Funcionario Redefinição do método pagamento

36 Instanciação da subclasse public class Teste { public static void main (String [ ] args) { Chefe joao = new Chefe ("Joao", "324569", , , 500); joao.aumentar (300); System.out.println ("Joao ganha: R$ " + joao.pagar( )); } Criação de um objeto da classe Chefe Execução do método aumentar, definido na superclasse Funcionário para um objeto da classe Chefe Execução do método pagar, definido na subclasse Chefe

37

38 Implementação da subclasse Chefe com super public class Chefe extends Funcionario { private double gastos_extra; private double adicional_chefia; public Chefe (String nomef, String rg, double sal, double gastos, double adic) { super (nomef, rg, sal); // Construtor da superclasse Funcionario this.gastos_extra = gastos; this.adicional_chefia = adic; } public double pagar ( ) { double recebe; recebe = super.pagar ( ); // Chamada de pagamento( ) da superclasse recebe = recebe + gastos_extra + adicional_chefia; return recebe; } Execução do método pagamento definido na superclasse

39 public class Ponto {... } public class Ponto3D extends Ponto {... } public class TestePonto { // classe de teste public static void main (String [ ] args) {... }

40 public class Ponto { private int x; private int y; public Ponto (int a, int b) { // Método Construtor this.x = a; this.y = b; } public double calcularDistancia (Ponto p) { // Método int dx = this.x - p.x; int dy = this.y - p.y; return Math.sqrt (dx*dx + dy*dy); }

41 public class Ponto3D extends Ponto { private int z; public Ponto3D (int a, int b, int c) { super (a, b); this.z = c; } public double calcularDistancia (Ponto3D p) { int dx = x - p.x; int dy = y - p.y; int dz = z - p.z; return Math.sqrt (dx*dx + dy*dy + dz*dz); }

42 public class TestePonto { public static void main (String [ ] args) { Ponto p1 = new Ponto (0, 0); Ponto p2 = new Ponto (10, 10); System.out.println (p1.calcularDistancia(p2)); Ponto3D p3 = new Ponto3D (0, 0, 0); Ponto3D p4 = new Ponto3D (10, 10, 10); System.out.println (p3.calcularDistancia(p4)); }

43 //Classe Empregado Comissionado public class EmpComissionado extends Object { protected String nome; protected double totalVendas; protected double taxaComissao; // construtor com 3 argumentos public EmpComissionado (String n,double vendas,double comissao){ nome = n; setTotalVendas (vendas); setTaxaComissao (comissao); }

44 public void setNome (String n){ nome = n; } public String getNome() { return nome; } public void setTotalVendas (double vendas){ totalVendas = (vendas < 0.0) ? 0.0 : vendas; } public double getTotalVendas () { return totalVendas; }

45 public void setTaxaComissao (double tx){ taxaComissao = (tx < 0.0) ? 0.0 : tx; } public double getTaxaComissao () { return taxaComissao; } public double calcularSalario(){ // Calcula o salário return taxaComissao * totalVendas; }

46 public void mostrarAtributos () { System.out.println("Nome do empregado: " + nome); System.out.println("Total de Vendas: " + String.format("%.2f",totalVendas)); System.out.println("Taxa de Comissão: "+ String.format("%.2f",taxaComissao)); System.out.println("Salario Total: " + String.format("%.2f",calcularSalario())); } } // fim da classe Empregado Comissionado

47 public class EmpFixoComissionado extends EmpComissionado { private double salarioBase; // atributo exclusivo public EmpFixoComissionado ( //constructor da classe String n, double vendas, double comissao, double salBase){ // chama construtor da superclasse super (n, vendas, comissao); // chamada a método da própria classe setSalarioBase (salBase); }

48 public void setSalarioBase (double salBase){ salarioBase=(salBase<0.0) ? 0.0 : salBase; } public double getSalarioBase() { return salarioBase; } public double calcularSalario(){ // Calcula o salário return salarioBase + super.calcularSalario(); }

49 // Mostra as informações public void mostrarAtributos () { super.mostrarAtributos(); System.out.println("Salario Base: " + String.format("%.2f", salarioBase)); } } // fim da classe Empregado Fixo Comissionado

50 public class Principal{ // método main public static void main ( String argv[]) { //instancia obj.da classe EmpFixoComissionado EmpFixoComissionado empregado = new EmpFixoComissionado ("Roberto Silveira", , 0.1, 300); // obtém os dados do empregado System.out.println ("Dados do Empregado:"); System.out.printf ("%s \n", "Nome: ", empregado.getNome() ); System.out.printf ("%s %.2f\n", "Vendas: ", empregado.getVendas() );

51 System.out.printf ("%s %.2f\n", "Comissao: ", empregado.getTaxaComissao() ); System.out.printf ("%s %.2f\n", "Salario total: ", empregado.calcularSalario() ); System.out.printf ("%s %.2f\n", "Salario base: ", empregado.getSalarioBase() ); System.out.println ("Informacoes do empregado" + " via o método mostrarAtributos"); empregado.mostrarAtributos(); } // fim do método main } // fim da classe Principal