Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal CONTEÚDO 2 Unidade 2 – Conceitos de Orientação a Objetos Abstração Classe Objeto encapsulamento Introdução Orientação a objetos – pressupõe que o mundo é composto por objetos, onde um objeto é uma entidade que combina estrutura de dados e comportamento funcional. No paradigma orientado a objetos, os sistemas são criados a partir dos objetos que existem no domínio do problema, isto é, os sistemas são modelados como um conjunto de objetos que interagem entre si. 3 Introdução O que são objetos no mundo computacional ? 4 Objeto Definição : Um objeto é a representação computacional de um elemento ou processo do mundo real Exemplos : cadeira, aula, venda, cliente … Os objetos possuem características e comportamentos – Cada característica ou propriedade é chamada de atributo do objeto • Por exemplo, o objeto moto tem como atributos cor, marca, … – Podemos sempre associar um conjunto de valores aos atributos. • Exemplo : a cor da moto pode ser vermelha, azul, verde, etc. 5 Objeto Cada comportamento é chamado de método do objeto – Um comportamento representa uma reação ou resposta de um objeto a uma ação do mundo real Exemplos de comportamentos para o objeto moto : acelerar, parar ... 6 Algumas características de OO vistas nesta aula : 7 Classificação, abstração e encapsulamento. Classificação Objetos com as mesmas características (atributos e métodos) são agrupados em uma classe Cada classe define um conjunto possível e infinito de objetos – Exemplo : Analise as características de uma mesa. Exemplo: número de pés, comprimento, etc. Analise os métodos. Exemplo : mover, limpar. A partir da identificação do conjunto de atributos e métodos comuns a todas as mesas que já vimos, temos a 8 classe Mesa Classificação Note que a classificação depende do nível de abstração e do ponto de vista (perspectiva) utilizado pelo desenvolvedor Quando criamos um objeto a partir de uma classe dizemos que temos uma instância da classe Por ser algo concreto, um objeto possui valores associados aos atributos da classe a qual ele pertence. 9 Classificação O estado de uma instância é definido pelos valores que atribuímos aos seus atributos Na programação OO, a ideia é que cada objeto seja responsável por seus dados (valores dos atributos) e seja capaz de executar os seus próprios métodos (comportamentos). Assim, podemos dizer que um objeto mantém seus próprios dados e executa seus próprios métodos. 10 Métodos especiais Criação e destruição de objetos de uma classe: – A classe é responsável pela criação e destruição de seus próprios objetos – A criação de um objeto é realizada através de um método especial chamado construtor – A destruição de um objeto é realizada através de um método especial chamado destrutor. 11 Abstração Abstração procura focar as características essenciais de um objeto, de acordo com a perspectiva do observador. – Exemplo : objeto aluno O que é relevante ? A cor do cabelo ou o estilo de roupa ? Não ! Relevante : Matrícula, – curso, etc... 12 Encapsulamento Uma classe encapsula atributos e métodos, ocultando os detalhes de implementação dos objetos Princípio do desenvolvimento orientado a objetos: o encapsulamento determina que a implementação de um objeto somente deve ser acessada através de uma interface visível e bem definida Os atributos não podem ser manipulados diretamente. Os atributos podem ser alterados ou consultados somente através dos métodos do objeto. 13 Encapsulamento Princípio do Encapsulamento: – Atributos não devem ser visíveis por nenhum objeto que não seja instância da própria classe ou de uma classe descendente (herança) – Assim, devemos declarar nossos atributos sempre como protected ou private 14 Classes As classes são os elementos básicos para construção de programas OO em linguagens como C++, Java e C#. Assim, para construir um programa OO devemos, inicialmente, identificar as classes que fazem parte do problema que estamos tentando resolver – Ao analisar um problema a ser resolvido, as classes normalmente são extraídas: • 1. dos conceitos que compõem o domínio do problema; • 2. dos conceitos adotados na solução do problema. 15 Classes Explicar a ideia de pacote e lembrar do pacote da classe Scanner Sintaxe da definição de Classe: [visibilidade] [abstract | final] class identificador [extends identificador2] [implements identificador3*] { [Atributos] [Métodos] } Também posteriormente, serão estudadas extends e 16 implements. 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 17 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. – static: define que esse atributo é da classe (será visto posteriormente) – final: atributo constante (valor inicial não pode ser alterado) 18 Atributos Atenção !! Em outras aulas veremos package, protected, static e final Nesta aula, portanto, nos interessa : – public: pode ser livremente lido ou alterado por métodos de qualquer classe – private: só pode ser lido ou alterado por métodos da própria classe, ou seja, esse atributo não é visível fora da class 19 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. Por exemplo, valores numéricos com zero, boolean com falso .... 20 Inicialização de atributos: Uma vez definida uma classe, podemos criar objetos ou instâncias dessa classe Para a criação de objetos usamos o operador new. Teremos a partir daí, um objeto ou instância da classe. Note que, 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 seja alocado espaço na memória para o novo objeto 21 Inicialização de atributos: Exemplo : Imagine uma classe Retangulo – Retangulo r; – r = new Retangulo(); Ou – Retangulo r = new Retangulo(); 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. Isso se chama sobrecarga (ou overload) de 22 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 têm nenhum tipo de retorno – Construtores podem receber parâmetros que serão usados na inicialização do objeto – Quando não definimos nenhum construtor para a classe, o Java gera automaticamente um construtor default ou padrão. 23 Métodos de acesso e métodos modificadores Métodos de acesso são usados para obter os valores dos atributos privados e métodos modificadores são usados para alterar os valores dos atributos privados Regra : public tipo get<nome do atributo>() { return atributo; } 24 Métodos de acesso e métodos modificadores public void set<nome do atributo>(tipo novoValor) { atributo = novoValor; } 25 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 26 (será visto posteriormente) Exercícios 1) Imagine que desejamos implementar um editor gráfico que irá manipular figuras 27 geométricas: Retângulo Triângulo Círculo Quais as classes candidatas para esse projeto ? Exercícios 2) Sabendo que todo livro possui autor, editora e preço, crie uma classe pública com construtor padrão e métodos modificadores e de acesso. Depois, crie dois livros com dados obtidos via console 3) Adicione código ao exercício anterior e altere os dados do 2o. livro da seguinte forma: autor para Harlan Coben, editora Arqueiro e preço R$ 30,00 28 4) Adicione código ao ex. 2 e compare os preços dos dois livros, imprimindo o nome da editora do livro de menor preço.