Baixe o app para aproveitar ainda mais
Prévia do material em texto
Java Programação Orientada a Objetos Java Java é multiplataforma, ou seja, um programa escrito em Java pode ser executado em qualquer plataforma sem necessidade de alterações no código fonte. Java é uma arquitetura aberta, extensível, com várias implementações, o que a torna independente do fornecedor. Robusta e segura Java pode ser baixada gratuitamente Linguagem Independente de plataforma que pode ser utilizada em vários produtos eletrônicos, tais como torradeiras e refrigeradores. Orientação a objetos com forte suporte a técnicas adequadas de engenharia de software Programação Orientada a Objetos POO é um paradigma de programação Usam classes e objetos, criados a partir dos modelos Modelos Modelos são representações simplificadas de objetos, pessoas, itens, tarefas, processos, conceitos, ideias etc. Um modelo normalmente contém operações ou procedimentos associados a ele, por exemplo: Inclusão de um pedido para uma mesa Modificação do status de um pedido Encerramento dos pedidos de uma mesa Operações são listas de comandos que processarão os dados contidos no modelo. Exemplos de modelos Uma conta bancária simplificada Aspectos práticos de contas reais (senhas, taxas) foram deixados de lado. ContaBancariaSimplificada nomeDoCorrentista saldo contaÉEspecial abreConta(nome,deposito,éEspecial) abreContaSimples(nome) deposita(valor) retira(valor) mostraDados() Classe São usadas por linguagens OO para modelar tipos compostos. são estruturas para conter, em determinado modelo, os dados e as operações que devem ser efetuadas nos dados. Definem um conjunto de características e comportamentos comuns. Exemplo: Receita de bolo; Planta do prédio que descreve o prédio, mas não corresponde fisicamente a ele. Objeto Um objeto ou instância é a materialização da classe; Possuem valores para as características (olhos verdes, calda de chocolate, cor azul) e podem realizar o comportamento(correr, ser comido, abrir a porta); Exemplo: um bolo feito com a receita, uma casa construída a partir da planta Variáveis e Funções Uma classe pode ter dois tipos de membro: – Variáveis (em jargão OO: “atributos”); – Funções (em jargão OO: “métodos”). Atributos são como partes deum tipo composto; Métodos são funções que são executadas no contexto de uma classe/objeto Os dados contidos em uma classe são conhecidos como campos ou atributos daquela classe. Cada campo deve ter um nome e ser de um tipo de dado nativo ou uma classe existente. Métodos podem receber argumentos. Variáveis|Atributos Definidos como variáveis no escopo da classe: int numero; String dono; double saldo; double limite; // ... } Funções|Métodos Um método é uma função que opera no contexto de uma classe (mensagem que o objeto recebe) É a maneira (método) de se fazer algo num objeto: class Conta { // Atributos já declarados... void sacar(double qtd) { double novoSaldo = this.saldo - qtd; this.saldo = novoSaldo; } void depositar(double qtd) { this.saldo += qtd; } } Referências São variáveis do “tipo” da classe. Analogia: – A TV é o objeto; – O controle é a referência; – Você só carrega a referência; – A referência pode existir sem o objeto. public class Coordenadas { int x; int y; int z; public static void main(String[] args) { Coordenadas coord; // Só a referência. // Não dá pra fazer nada... // Agora temos um objeto, podemos usá-lo. coord = new Coordenadas(); coord.x = 10; coord.y = 15; coord.z = 18; } } Exemplo : Criando classes em Java Sintaxe básica Uma classe em Java será declarada com a palavra-chave class seguida do nome da classe. O nome não pode conter espaços; Deve começar com uma letra; Deve ser diferente das palavras reservadas; Caracteres maiúsculos e minúsculos são diferenciados; Conteúdo da classe limitado pelas chaves { }; Declaração de campos de classes Campos podem ser referências a uma classe. Sintaxe básica: NomeDaClasse nomeDaReferencia = new NomeDaClasse(); Exemplo: class RegistroAcademico { String nomeDoAluno; int numeroDeMatricula; Data dataDeNascimento = new Data(); // referencia a classe data } Construtor É um tipo especial de membro de classe chamados automaticamente quando instâncias são criadas através da palavra chave new Construtores são úteis para: inicializar os atributos de uma classe realizar rotinas complexas de inicialização realizar inicializações segundo parâmetros passados no momento da criação do objeto Caso o programador não forneça uma versão explícita do construtor, Java utiliza uma versão de construtor implícita que não recebe nenhum parâmetro Declarando um construtor Construtores devem ter exatamente o mesmo nome da classe Construtores não possuem tipo de retorno Construtores são, normalmente, públicos class Ponto{ float x; float y; public Ponto(float pX,float pY){ x = pX; y = pY; } } Sobrecarga Um método pode ter o mesmo nome que outro método na mesma classe. Isto é usual quando existem duas ou mais formas diferentes de se realizar a mesma tarefa Neste caso diz-se que o método está sobrecarregado Uma sobrecarga é válida se a assinatura do método difere no número ou no tipo dos parâmetros Java admite também, que se sobrecarregue os construtores de uma classe. Pode-se se referir de dentro de um construtor sobrecarregado para outro, através do uso da palavra reservada this Fazendo Sobrecargas class Ponto{ float x; float y; public Ponto(float pX,float pY){ x = pX; y = pY; } void mover(float novoX,float novoY){ x = novoX; y = novoY; } void mover(){ x = 0; y = 0; } } A referência this A referência this é usada para: referência ao próprio objeto acesso a variáveis do objetos passagem do objeto como parâmetro class Circulo{//classe Círculo float raio = 0; void alterarRaio(float raio){ this.raio = raio; } } Encapsulamento Interação entre objetos sem conhecimento do funcionamento O encapsulamento pode trazer diversas vantagens: Protege os dados contra acessos indevidos; Tende a criar sistemas mais coesos; Facilita o reuso; Facilita a manutenção; Facilita a evolução; Implementação do encapsulamento Modificadores de acesso Java permite a restrição ao acesso a campos em métodos por intermédio de modificadores de acesso que são declarados dentro das classes. Existem quatro modificadores de acesso: public: garante que o campo ou método da classe declarado com este modificador poderá ser acessados ou executado a partir de qualquer outra classe. Private: só podem ser acessados, modificados ou executados por métodos da mesma classe, sendo ocultos para o programador usuário que for usar instâncias desta classe ou criar classes herdeiras ou derivadas. protected: funciona como o modificador private, exceto que classes herdeiras ou derivadas também terão acesso ao campo ou método. Get e Set Na OO temos um padrão de métodos para atualizar e consultar dados ocultos (privados) em uma classe Get: utilizados para obter (consultar) o valor do atributo oculto. Set: utilizado para alterar o valor de um atributo oculto. public class Aluno{//classe Aluno ... public Aluno(int matricula, String nome, String curso, float mensalidade){ this.matricula = matrcula; }; public void setMatricula(int matricula){ this.matricula=matricula; } public int getMatricula(){ return this.matricula; } Herança na OO Na POO classes também podem herdar características (atributos e métodos) de outras classes. Herança é possível definirmos classes genéricas que agreguem um conjunto de definições comuns a um grande número de objetos (Generalização). A partir destas especificações genéricas podemos construir novas classes, mais específicas, que acrescentem novas características e comportamentos aos já existentes (Especialização). Herança em java Usa-se a palavra reservada extends para implementar herança em Java. Class Pessoa{ protected string cpf, nome; public Pessoa (String cpf, String nome){ this.cpf=cpf; this.nome=nome;} // gets e sets } Class Funcionario extends Pessoa{ protected float salario; public Funcionario (String cpf, String nome, float Salario){ super(cpf, nome); this.salario=salario; } //gets e sets } Class Professor extends Funcionario{ protected string titulacao; public Professor (String cpf, String nome, float Salario, String titulacao){ super(cpf, nome, salario); this.titulação = titulação; } // gets e sets } Vantagens de se usar Herança Algumas vantagens do uso de herança são: Criação de uma hierarquia de classes Reuso de características entre classes Facilita a inserção de novas classes (evolução do sistema) Favorece o aumento da qualidade Herança Múltipla Quando uma classe herda características de duas ou mais classes temos herança múltipla. Em Java NÃO temos como implementar herança múltipla usando extends. Temos como simular a herança múltipla usando o conceito de Interface que estudaremos nas próximas aulas. Classes Abstratas São classes compostas por implementações genéricas e especificações de procedimentos. Como não são totalmente implementadas, não produzem instâncias, ou seja, não podemos criar objetos dessas classes. Elas agrupam características e comportamentos que serão herdados por outras classes e fornecem padrões de comportamento que serão implementados nas subclasses. Para se definir classes abstratas usa-se a palavra chave abstract. Um método abstrato será apenas o molde de uma implementação a ser provida pelas classes filhas concretas. As classes que derivarem de um classe abstrata devem obrigatoriamente implementar todos os métodos abstratos definidos na classe Pai. Classes Abstratas abstract class Figura { int x; // coordenada x int y; // coordenada y public Figura (int x1, int y1) { x = x1; y = y1; } public abstract void desenha(); public abstract void apaga(); public void move (int x1, int y1) { apaga(); x = x1; y = y1; desenha(); } } Definição da classe abstrata, através da palavra abstract. A classe pode ter um construtor, mesmo que não possa instanciar objetos. Declaração dos métodos abstratos. Esses métodos devem obrigatoriamente ser implementados nas classes derivadas. Declaração de um método normal que poderá ser utilizado pelos objetos de classes derivadas. Classes Abstratas class Quadrado extends Figura { public Quadrado(int x1, int y1) { super(x1, y1); } public void desenha() { System.out.println("Desenhando quadrado (" + x + "," + y + ")"); } public void apaga() { System.out.println("Apagando quadrado (" + x + "," + y + ")"); } } Utilização do construtor da classe Pai. Implementação obrigatória dos métodos definidos na classe abstrata. Classe para testar o exemplo. class TesteAbstract { public static void main (String args[]) { Quadrado q = new Quadrado(10,10); q.desenha(); q.move(50,50); q.apaga(); } } Interface Classes abstratas podem conter métodos abstratos e não abstratos Se uma classe abstrata tiver APENAS métodos abstratos, podemos criá-la como uma Interface Interface não pode ser instanciada Todos os métodos são implicitamente abstract e public Atributos serão implicitamente static e final e devem ser inicializados na declaração Para criar uma interface usar a palavra interface NÃO usa a palavra class Os métodos não precisam de modificador pois são public e abstract Interfaces NÃO tem construtores Interface pode usar outras classes como tipo de dado Interface interface objetoGeometrico { double calculaArea(); double calculaPerimetro(); Ponto2D centro(); } Class circulo implements ObjetoGeometrico { private Ponto2D centro; private double raio; public Circulo (Ponto2D centro, double raio){ setCentro (centro); setRaio(raio); } public Ponto2D centro(){ return getCentro; } public double calculaArea(){ return 3.14*getRaio()*getRaio(); } public double calculaPerimetro(){ return 2*3.14*getRaio(); } } Pacotes Muitas aplicações são formadas por diversas classes É importante agrupar estas classes para organizá-las de acordo com uma relação específica. Ex. Um sistema pode usar classes de outros sistemas (reutilização) package Calendario; public class Data{ private byte dia, mês; private short ano; public Data(){ } ... gets e sets .... } package calendario; public class Hora{ private byte hora, min, seg; public Hora(){ } ... gets e sets .... } Import Calendario.*; Class DemoCalendario{ Public static void main (String[] args){ Data d1= new Data(); } }
Compartilhar