Post on 10-Nov-2018
Classes e Objetos● A Programação Orientada a Objetos (POO) é
uma técnica de programação que se baseia na construção de classes e utilização de objetos.
● Os objetos são formados por dados e operações específicas, que delimitam um conjunto particular de atividades.
Classes e Objetos● As classes são modelos para os objetos. ● Um conjunto de objetos que possuem
características (atributos) e comportamentos (métodos) comuns podem usar o mesmo modelo, ou seja, pertencem a mesma classe.
Classes e Objetos● Assim, uma classe é um modelo para um novo
tipo de objeto que pode ser definido pelo programador. Já os objetos são instâncias de classes.
● Dessa forma, podese afirmar que as classes são utilizadas para definir novos tipos na POO.
Classes e Objetos● Na verdade, esta sentença realiza três ações:
– Declaração. Nesta ação, apenas se declara que um objeto será de uma determinada classe declarada, ou seja, declarações não criam objetos. Por exemplo, o comando Pessoa obj apenas declara que obj pertencerá à classe Pessoa, porém o objeto não foi criado e, conseqüentemente, não poderá ser usado antes de ser inicializado.
Classes e Objetos● Na verdade, esta sentença realiza três ações:
– Instanciação. Nesta ação, o operador new cria dinamicamente um novo objeto. Ele requer uma chamada a um construtor, que é um método especial e que será detalhado na seção sobre métodos.
Classes e Objetos● Na verdade, esta sentença realiza três ações:
– Inicialização. Após ter sido criado, é necessário inicializar o objeto. O processo de inicialização consiste em atribuir valores para os atributos dos objetos. Isto é realizado durante a execução do construtor.
Classes e Objetos● Acessibilidade
– Acessibilidade, também conhecida como visibilidade, é um aspecto importante na POO, pois possibilita que o programador limite o uso de certos elementos das classes.
– É com a restrição de acesso que se implementa, em grande parte, o encapsulamento das classes.
– Java possui três moderadores de acesso explícitos (public, private e protected) e um especificador implícito.
Classes Abstratas● Uma classe em Java criada para funcionar
como um tipo e que pode instanciar objetos é considerada concreta.
● Diferentemente disto, uma classe em Java será considerada como abstrata se for assim declarada ou nas situações em que os seus métodos declarados não estão implementados, mas são apenas especificados.
Classes Abstratas● Métodos que não possuem implementação
também são chamados de abstratos. ● Classes que possuam métodos abstratos são
consideradas também como abstratas e não podem ser instanciadas.
Classes Abstratas● Hipóteses em que uma classe Exemplo será
abstrata:– Se a classe Exemplo possuir explicitamente, pelo
menos, um método abstrato.– Se qualquer superclasse de Exemplo possuir um
método abstrato e a classe Exemplo não implementálo.
– Se a classe Exemplo declarar ou herdar um método abstrato de uma interface e a classe Exemplo não implementálo.
Classes Internas● Classes internas ou internas são classes
declaradas dentro de outras classes, sendo consideradas como membros das classes externas.
Classes Internas● A declaração abaixo ocasionaria um erro de
compilação:
● As classes aninhadas são elementos auxiliares e somente devem ser criadas quando sua implementação se limita a dois ou três métodos simples.
Classes Finais● Uma classe pode ser declarada como final se a
sua definição está completa e não se deseja que ela seja extendida.
● Um erro de compilação ocorrerá se uma classe herdar de outra classe, quando esta for declarada como final.
● Daí, podese afirmar que uma classe final não poderá ter subclasses.
Classes Anônimas● Classe anônima é uma classe sem nome e
definida como uma subclasse ou para a realização de uma interface, com o propósito de servir para a instanciação de um único objeto.
Classes Anônimas● Como as classes anônimas em Java
comprometem a legibilidade do código, estas não devem ser usadas quando for necessário implementar mais do que dois ou três métodos de modo simples.
● Assim, este tipo de classe será examinada com maior profundidade no assunto de herança.
Atributos● As características dos objetos ou das suas
partes são identificadas através dos seus atributos ou campos.
● A sintaxe da criação de atributos é:
Constantes● Um atributo pode se tornar uma constante em
Java através do comando final.● Opcionalmente, é possível adicionar um
moderador de acesso à constante em Java, com o objetivo de determinar o escopo dessa constante.
Métodos● Os métodos são blocos de rotinas associadas
aos objetos, isto é, trechos de código que permitem realizar ações ou transformações sobre os valores dos atributos, modificando o estado dos objetos e proporcionando o comportamento desejado.
Métodos● O moderador de acesso determina a
visibilidade do método. ● Em geral, os métodos são públicos para que as
outras classes possam acessar os atributos privados.
Métodos● O tipo de retorno indica qual o tipo de valor
devolvido como resultado do método. ● Se o método não retornar um valor, devese
utilizar void para indicar, ao compilador, que não existirá retorno.
Métodos● Após a instanciação de um objeto, este pode
utilizar os seus métodos através do operador (.), também conhecido como seletor.
● A sintaxe de Java para uso de métodos pelos objetos é:
Métodos Construtores● Construtores são métodos especiais utilizados
para inicializar e preparar novos objetos durante a sua criação.
● Não existe um comando especial para diferenciar os construtores dos demais métodos. Porém, eles têm, obrigatoriamente, o mesmo nome que as suas classes.
Métodos Construtores● Os construtores não têm nenhum tipo de
retorno, pois o resultado de sua chamada é sempre uma nova instância.
● Uma classe pode conter mais de um construtor, desde que não haja construtor com igual lista de parâmetros, ou seja, com igual assinatura do método.
Métodos Construtores● Java não exige que o programador escreva
construtores para as classes.● A inicialização padrão de Java segue as
seguintes regras:– Variáveis de tipo primitivo numéricas e caracteres
recebem o valor 0 (zero).– Variáveis de tipo lógica recebem valor falso (false).– Variáveis de instância recebem valor null, indicando
a ausência de instâncias válidas.
Métodos Construtores● Operador this:
– O operador this é utilizado para que um objeto possa acessar uma referência a si próprio.
– Quando um método não estático é chamado por um objeto particular, o corpo do método utiliza implicitamente o operador this para referenciar as variáveis de instância do objeto e de outros métodos.
Sobrecarga de Métodos● A sobrecarga de métodos (overload) é uma útil
característica da programação orientada a objetos que permite a existência de dois ou mais métodos com o mesmo nome, desde que possuam listas de parâmetros diferentes.
● O compilador deve escolher qual método chamar.
● Vários métodos podem ser sobrecarregados numa mesma classe.
Sobrecarga de Métodos● O benefício deste recurso para o programador
é que ele pode manter o mesmo nome para operações similares, mesmo com comportamentos distintos, conseguindo melhorar a semântica do código e simplificar o uso das classes.
Métodos Sobrescritos● Quando uma classe é herdada por outra, todos
os seus métodos não privados são herdados.● Porém, existem algumas situações que se
deseja alterar o comportamento de alguns desses métodos herdados.
● Isto é realizado através da redefinição dos métodos da superclasse, a partir de sua reescrita, definindoos com os mesmos nomes e com a mesma lista de parâmetros.
Métodos Sobrescritos● Dessa forma, a chamada a um método
sobrescrito, a partir de um objeto instância da subclasse executará o comportamento redefinido pela subclasse e não mais o definido pela superclasse.
● Se o objeto for instância da superclasse, o método executará o comportamento definido na própria superclasse.
Métodos Estáticos● Existem algumas situações em que é desejável
que as várias instâncias de uma classe compartilhem alguma informação, tal como o valor de uma constante, um número de identificação, contagem ou totalização.
● Esse efeito pode ser obtido com o emprego do modificador static.
Método main● O método main(.) é o ponto de entrada de
aplicativos Java. ● Para criar um aplicativo, é necessário que o
programador escreva uma definição de classe que inclua o método main(.).
● A declaração padrão, em Java, deste método é:
Método main● Por convenção, o método main(.) é declarado
como público. ● No entanto, é necessário que ele seja estático,
para que possa ser executado sem a necessidade de construir uma cópia da classe correspondente.
Método main● O array args, do tipo String, contém quais
argumentos que o usuário possa ter fornecido na linha de comando.
● O nome do vetor é comumente chamado de args, mas poderia ter qualquer outro nome.
Pacotes● Pacotes são unidades de Java que agrupam
classes relacionadas. ● Os pacotes definem restrições de acesso do
seu conteúdo para clientes fora da unidade. ● A criação de pacotes é feita através da
instrução package e que deve constar na primeira linha de um arquivofonte de Java.
Pacotes● Por exemplo, num programa desenvolvido
dentro da UEA, o pacote poderia ter o seguinte nome:
● A seguir, um exemplo de importação de pacotes em Java:
Pacotes● O asterisco indica que serão importadas todas
as classes do pacote. ● Para importar uma classe específica, ao invés
do uso do asterisco, o programador deveria escrever o nome da classe que deseja importar.
Interfaces● Interface é o mecanismo pelo qual o
programador pode definir um conjunto de operações sem se preocupar com sua implementação, indicando assim um modelo de comportamento para outras classes.
● As interfaces devem conter apenas métodos sem implementação.
Interfaces● Conceitualmente, as interfaces equivalem aos
métodos abstratos. ● Também é permitida a declaração de
constantes. ● A sintaxe de uma interface em Java é:
Interfaces● Para a construção das interfaces em Java é
necessário que o nome do arquivo tenha o mesmo nome da interface.
● Não deve existir implementação dos métodos das interfaces, mas apenas a declaração destes métodos.
Interfaces● Além disso, as constantes (atributos possíveis
em uma interface) são implicitamente públicas, estáticas e finais, sendo essa a forma usual de sua declaração.
● As constantes são consideradas como estáticas porque só pode existir uma cópia do dado disponível e final porque estes dados não devem ser modificados.
Exercícios● Como uma classe em Java é estruturada?● Qual é a diferença, quanto às restrições, dos
modificadores final e static?● Por que uma classe abstrata não pode ser
instanciada?● Por que uma classe concreta não pode ter
métodos abstratos?
Exercícios● Qual é a diferença entre uma interface e uma
classe abstrata?● Qual é a diferença entre um construtor e um
método?● Como é possível reconhecer um construtor em
Java?● Um método estático pode acessar membros de
classe não estáticos? Justifique a sua resposta.