Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Aula 3 Parte 2 Professora : Jane Mestre em Engenharia de Sistemas e Computação – COPPE/UFRJ Objetivos Estudo e aplicação dos seguintes conceitos : abstração, classe, objeto, construtor, método, atributo, encapsulamento, especificadores de acesso private e public. Operador new Construtor padrão ou default Uso de métodos de acesso (get) e de métodos modificadores(set) Professora Jane 2 Começando a implementar... Imagine que desejamos implementar um editor gráfico que irá manipular figuras geométricas em um plano cartesiano: Retângulo Triângulo Círculo Polígonos de 5 ou mais lados Quais as classes candidatas para esse projeto ? Classes Imagine que desejamos implementar um editor gráfico que irá manipular figuras geométricas em um plano cartesiano: Retângulo Triângulo Círculo Polígonos de 5 ou mais lados Quais as classes candidatas para esse projeto ? Retângulo Triângulo Círculo Polígono Plano Cartesiano ... Classes Tomando por base a implementação da classe Retângulo: Quais as características de um retângulo? Que operações gostaríamos de realizar com o retângulo ? Classes Tomando por base a implementação da classe Retângulo: Quais as características de um retângulo? Altura, largura, posição (x, y) no plano, cor da borda, cor de preenchimento, ... Que operações gostaríamos de realizar com o retângulo ? Desenhar, mover, rodar, redimensionar, ... Vamos começar, então, definindo a classe Retangulo. Classes Versão inicial da classe Retangulo: package principal; public class Retangulo { } Vamos acrescentar atributos na classe Retangulo. Preferencialmente, toda classe deve ser declarada dentro de um pacote Por ser pública, a classe Retangulo é visualizada por todas as classes de todos os pacotes do sistema. Classes Para criar uma classe precisamos definir o lugar onde iremos colocar essa classe. No Java, esse lugar é chamado de pacote. Podemos imaginar o pacote como sendo um diretório ou uma pasta onde colocamos a classe. Podemos definir quantos pacotes quisermos. O nome dos pacotes é definido pelo próprios desenvolvedores. Pelo padrão do Java, os nomes dos pacotes devem ter somente letras minúsculas. Classes Da mesma forma que podemos ter uma hierarquia de pastas, também podemos ter uma hierarquia de pacotes. Quando temos um pacote dentro de outro usamos o ponto (.) para definir a hierarquia de pacotes: java.mhs.unitri.javapos Classes Sintaxe da definição de Classe: [visibilidade] [abstract | final] class identificador [extends identificador2] [implements identificador3*] { [Atributos] [Métodos] } visibilidade: public, private ou package. Veremos package depois. abstract: não podem ser criadas instâncias da classe (será visto posteriormente) final: não pode ter subclasses. Também veremos depois. Classes Visibilidade da classe: public: pode ser livremente instanciada por qualquer outra classe. private: só é visível no arquivo onde foi criada. package: só pode ser instanciada por classes do mesmo pacote. É a visibilidade default. Atributos Atributos são declarados da mesma forma que as variáveis locais, porém com uma sintaxe ligeiramente diferente: [visibilidade] [static] [final] tipo atributo [ = inicialização]; visibilidade: public, private, package ou protected. Veremos package (ou default) e protected posteriormente. static: define que esse atributo é da classe (será visto posteriormente) final: atributo constante (valor inicial não pode ser alterado) Atributos Inicialização de atributos: Um atributo pode ser explicitamente inicializado, da mesma forma que as variáveis locais. Quando não for inicializado explicitamente, a máquina virtual do Java (JVM) se encarregará de fazê-lo, da seguinte forma: boolean: false char: ‘\0’ byte, short, int, long: 0 float, double: 0.0 referência para outro objeto: null Classes Uma vez definida uma classe, podemos criar objetos ou instâncias dessa classe. Lembre-se: a classe é um molde a partir do qual podemos representar objetos reais. Objetos Classe public class Retangulo { private double base; private double altura; } Classes Criação de objetos: o operador new É um operador usado para criar um objeto, ou seja, uma instância de uma classe. Ao declararmos uma variável do tipo de uma classe não estamos criando o objeto em si, mas somente uma referência para o objeto. No momento da declaração da variável a referência está com valor null. Precisamos usar new para que o Java aloque espaço na memória para o novo objeto. Classes Exemplo: criação de uma instância da classe Retangulo com o operador new. Retangulo r; r = new Retangulo(); Define uma variável r do tipo Retangulo. Inicialmente essa variável não referencia nenhum objeto, pois este ainda não foi criado. r ? Classes Exemplo: criação de uma instância da classe Retangulo com o operador new. Retangulo r; r = new Retangulo(); • Cria uma nova instância da classe Retangulo. A classe é instanciada. • A variável r passa a referenciar esse objeto. • Os valores dos atributos são inicializados r base = 0 altura = 0 Construtores Quando criamos um objeto: 1. Precisamos definir os valores de seus atributos; 2. Evitar que os objetos sejam criados com valores de atributos inválidos. No nosso exemplo, não deveríamos ter um Retangulo com dimensões negativas, por exemplo. Para definir como as instâncias de uma classe podem ser criadas usamos construtores. Assim, podemos dizer que Construtores são métodos especiais usados para criar uma instância de uma classe (objeto). Podem existir várias formas diferentes de criarmos um objeto. Assim, podemos ter vários construtores diferentes para uma mesma classe. Construtores Sintaxe básica de construtores: public NomeDaClasse ([parâmetros]) [throws exceções] { [ corpo do construtor ] } Observe que: Construtores devem ter, obrigatoriamente, o mesmo nome da classe. Construtores não tem nenhum tipo de retorno. Nem void. Construtores podem receber parâmetros que serão usados na inicialização do objeto. Construtores Quais construtores podemos definir para a classe Retangulo ? Lembre- se que a instância deve ficar em um estado consistente. public class Retangulo { private double altura; private double base; public Retangulo() { } } Construtores Outro construtor para a classe Retângulo: package principal; public class Retangulo { private double altura; private double base; public Retangulo(double b, double a) { base = b; altura = a; } } Construtores Outro construtor para a classe Retângulo ... Outra forma de fazer : package principal; public class Retangulo { private double altura; private double base; public Retangulo(double base, double altura) { this.base = base; this.altura = altura; } } Inicializa todos os atributos do Retangulo. O this é usado para referenciar o próprio objeto. Dessa forma diferenciamos o atributo base do parâmetro base. Construtores Como ocorre a criação do objeto com operador new e construtor ? Retangulo r1, r2; r1 = new Retangulo(10, 20.5); //instancia a classe Retantulo r2 = new Retangulo(5.6, 15); Quando definimos as variáveis os objetos ainda não existem. r1 ? r2 ? Construtores Como ocorre a criação do objeto com operador new e construtor ? Retangulo r1, r2; r1 = new Retangulo(10, 20.5); public Retangulo(double base, double altura) { this.base = base; this.altura = altura; } A referência this é usada para informar que estamos acessando o atributo base ao invés do parâmetro base. r1 base = 10 altura = 20.5 this O operador new cria o objeto e, em seguida, inicializa os atributos do objeto. Construtores Como ocorre a criação do objeto com operador new e construtor ? Retangulo r1,r2; r1 = new Retangulo(10, 20.5); r2 = new Retangulo(5.6, 15); Quando criamos outro Retangulo, todo esse processo se repete. r1 base = 10 altura = 20.5 r2 base = 5.6 altura = 15 Construtores Resumo sobre Construtores: São métodos especiais usados para inicializar a instância com os valores desejados. O construtor sem parâmetros é chamado de construtor default. Construtores não retornam nenhum valor. Ao criar um construtor, nós definimos que parâmetros deverão ser passados para que o objeto seja criado de forma coerente. Podemos criar vários construtores para uma mesma classe. Construtores não podem ser chamados diretamente pelo nosso código. Construtores são chamados automaticamente pela máquina virtual Java, de acordo com o tipo dos parâmetros que estamos passando na sua chamada. Construtores são chamados após a inicialização dos atributos. Quando não definimos nenhum construtor para a classe, o Java gera automaticamente um construtor default. Métodos de Acesso e Modificadores Se os atributos são privados, como lemos ou alteramos os seus valores? Métodos de Acesso Métodos de acesso são usados para ler ou alterar atributos e usam os seguintes padrões: public tipo get<nome do atributo>() { return atributo; } public void set<nome do atributo>(tipo novoValor) { atributo = novoValor; } Métodos de acesso e métodos modificadores Exemplo: métodos get e set para o atributo base. public double getBase() { return base; } public void setBase(double base) { this.base = base; } Métodos ... Outros métodos Método calcularArea(): package Principal; public class Retangulo { //Atributos ... Construtores ... // Outros métodos... public double calcularArea() { return base * altura; } } Métodos Sintaxe de métodos da Classe: visibilidade [static] [final] [abstract] tipo método ([parâmetros]) [throws exceções] { [ corpo do método ] } Visibilidade: public, private, package ou protected. static: método da classe (será visto posteriormente) final: método não pode ser sobrescrito (será visto posteriormente) abstract: método deve ser implementado nas subclasses (será visto posteriormente) Visto em aula, no quadro e com testes práticos. Classes : TestaRetangulo (com o método main) Retangulo Veja as tarefas propostas em aula. Projeto TestaRetangulo
Compartilhar