• Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento, uma nota. Da mesma forma, Java também permite modelar e abstrair cada entidade da aplicação em um objeto; • Cada objeto existente pode ser enquadrado em uma categoria mais genérica, que representa um conjunto de elementos com características comuns. Assim, um tubarão é um objeto que pertence à família dos peixes, pois ele apresenta algumas características comuns a todos os peixes. Um aluno é um objeto de um grupo mais genérico conhecido como "pessoas", já que um aluno apresenta alguns elementos comuns a todas as pessoas; • Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli • Todo objeto, em Java, é uma instância da classe; • Todo objeto cria uma relação do tipo "é-um(a)" com sua classe. Assim, um tubarão é um peixe e um aluno é uma pessoa; • Objetos herdam métodos (funções) e atributos (características) de suas classes; • Uma classe pode utilizar métodos e atributos de objetos que pertencem a outra classe (talvez, até mesmo, criada por outra pessoa). Esta classe é chamada de classe cliente ou classe usuária; • Diferentemente do mundo real, em Java, é possível termos uma classe sem a necessidade de criarmos um objeto (instanciarmos) a partir desta classe; • Um objeto pode enviar mensagens (interface) para outros objetos requisitando alguma tarefa ou serviço; • Em Java, uma classe é apenas uma descrição abstrata daquilo que um objeto poderá vir a ser. IFSC/POO + JAVA - prof. Herval Daminelli • Em Java, por definição, objeto é tudo aquilo que representa uma entidade do mundo real e pode ser identificado distintamente de qualquer outra coisa. Todo objeto tem identidade, estado e comportamento específicos; • O estado do objeto (também conhecido como propriedades ou atributos) é representado por variáveis (campos de dados) que armazenam valores; • O comportamento de um objeto (também denominado de ações ou métodos) são as tarefas ou serviços ou atividades ou ações que um objeto pode desempenhar; • Objetos do mesmo tipo compõem uma classe; • Todo objeto é criado por um método especial de uma classe chamado de construtor. IFSC/POO + JAVA - prof. Herval Daminelli Ao criar uma classe, você precisa definir... O nome da classe Os métodos e atributos da classe (dentro do corpo) Um especificador de acesso opcional – public, private, etc... A palavra-chave class O corpo da classe, entre um par de chaves { } • Então, poderíamos criar um classe "Empregado" com um dado chamado cargo e dois métodos: "definirCargo() e obterCargo() – veja gráfico no próximo eslaide; • Atributos em uma classe também são chamados de campos de dados; • Em Java, uma classe que contém o método main() e, portanto, pode ser executada, é chamada de classe principal. Toda classe é um tipo de dado composto; • Classes são também chamadas de tipos abstratos de dados ou tipos de dados definidos pelo programador. IFSC/POO + JAVA - prof. Herval Daminelli • Em Java, para cada campo de dado que você cria em uma classe, há a necessidade de se ter dois métodos públicos que permitirão que outras classes acessem este campo de dado (ler – get) ou modifiquem este dado (escrever – set). Não é obrigatório, mas convenciona-se iniciar o nome do método que define o dado com a palavra set e o nome que obtém o dado com a palavra get; • Assim, na nossa classe de exemplo "Empregado", poderíamos renomear os dois métodos para getCargo() e setCargo(); • A classe criada na página anterior pode ser compilada normalmente em Java, mas a aplicação não poderá ser executada. Isto porque esta aplicação não contém nenhum método main(). Classes criadas desta forma têm o objetivo de serem usadas como um tipo de dado para instanciarem objetos dentro de outras classes. IFSC/POO + JAVA - prof. Herval Daminelli • modificador public – classes públicas podem ser usadas por QUALQUER objeto na aplicação. São a base para outras classes mais específicas (herança); • modificador private – impede que qualquer classe externa modifique o campo de dados cargo. Este atributo só pode ser modificado pelos métodos da própria classe Empregado. Esta técnica é conhecida como "ocultação de dados" ou encapsulamento ou abstração.IFSC/POO + JAVA - prof. Herval Daminelli Tipo public default private Aplica-se a Significado • Classes • Métodos • Campos de dados Podem ser acessados de qualquer outra classe, na mesma aplicação ou em ou em outra aplicação • Classes • Métodos • Campos de dados Podem ser acessados por qualquer classe que pertença ao mesmo pacote. Java atribui automaticamente o modificador default quando você não especifica nenhum • Classes (somente para classes internas) • Métodos • Campos de dados Elementos privado só podem ser acessados de dentro de sua própria classe Os modificadores de visibilidade determinam como uma classe ou seus membros podem ser acessados de fora da classe. IFSC/POO + JAVA - prof. Herval Daminelli • O código na próxima página cria duas classes. A classe TesteCirculo, pública, que contém o método main – e é a classe principal, de onde parte toda a execução da aplicação; e a classe Circulo, dentro da classe principal, criada para instanciar métodos e atributos de um objeto circulo. • Quando você cria duas ou mais classes em um mesmo arquivo, somente UMA delas pode ser pública. Uma classe pode ser privada somente se ela estiver DENTRO de outra classe. Recomenda-se, sempre, termos uma única classe por arquivo. • Campos de dados e métodos de uma classe definidos como private só podem ser acessados de dentro da própria classe; • A classe pública principal deve ter o MESMO NOME do arquivo salvo; • Então, em nosso exemplo a seguir, o arquivo deverá ser salvo como TesteCirculo.java e cada classe também gerará arquivos individuais .class; • Em nosso exemplo, teremos, após a compilação, TesteCirculo.class e Circulo.class. IFSC/POO + JAVA - prof. Herval Daminelli TesteCirculo.class Gera Compilado por Compilador Java Gera Circulo.class • Nota: quando uma classe (a classe cliente) faz uso de outra classe (externa) que não está na mesma pasta, deve-se utilizar a diretiva import no topo do arquivo que contém a classe cliente e que utiliza a classe externa. IFSC/POO + JAVA - prof. Herval Daminelli • Suponha a criação da classe TV representada pelo modelo UML abaixo e implementação de objetos utilizando seus atributos e Modelando uma classe com UML métodos. TV • O sinal + representa canal: int métodos de acesso volume: int público; ligada: boolean +TV(): void • O método TV() é +desligar(): void especial e é o método usado para +ligar(): void instanciar (criar) o +mudarCanal(novoCanal: int): void +mudarVolume(novoVolume: int): void objeto, chamado +aumentarCanal(): void de construtor. +diminuirCanal(): void Uma classe pode +aumentarVolume(): void ter mais de um +diminuirVolume(): void construtor. IFSC/POO + JAVA - prof. Herval Daminelli IFSC/POO + JAVA - prof. Herval Daminelli continuação IFSC/POO + JAVA - prof. Herval Daminelli • Criar um objeto em Java é um processo de duas etapas: • Primeiro, você declara um tipo para o objeto, seguido de um nome; • Depois, você reserva memória do computador para criar o objeto. Empregado algumEmpregado = new Empregado(); Tipo de referência Variável de referência (objeto) Método construtor TV tv1 = new TV(); • Note que o nome do método construtor é sempre igual ao nome da classe onde está definido o construtor; • Depois que um objeto é instanciado, ele pode acessar outros métodos e atributos da classe através da notação do ponto. algumEmpregado.pedirRecisao(); ou algumEmpregado.salario = 5000,00. variável de instância IFSC/POO + JAVA - prof. Herval Daminelli • Quando você cria uma classe, tal como Peixe, e instancia um objeto com uma declaração igual a Peixe tubarao = new Peixe();, você, de fato, está chamando o construtor da classe Peixe. Se você não criou o construtor diretamente em sua classe, o compilador Java fornece um construtor-padrão, sem nenhum argumento, criado automaticamente sempre que você constrói uma classe, e inicializa campos de dados do objeto com os valores em destaque: • Qualquer construtor deve ter o MESMO nome de sua classe; • Um construtor NUNCA deve ter um tipo de retorno. Uma classe pode ter mais de um construtor; • numéricos = 0; • caracteres = Unicode '\u0000'; • booleanos = false; • outros objetos = null. • Geralmente, construtores são métodos públicos. IFSC/POO + JAVA - prof. Herval Daminelli • Um método construtor de uma classe pode realizar qualquer tarefa, mas, geralmente, ele inicializa os campos de dados do objeto (seus atributos); • Lembre-se de que se você não definir um método construtor, o próprio Java fornece um construtor-padrão quando você cria o objeto. Esse você criar seu construtor na classe, mas sem nenhum argumento, ele também é chamado de construtor-padrão; • Construtores são métodos que nunca tem um tipo de valor de retorno, nem mesmo void; • Construtores são invocados por meio do operador new; • Construtores podem ser sobrecarregados, isto, podemos ter construtores com o mesmo nome, mas com diferentes assinaturas; • Quando, em uma classe, você define um construtor que não recebe nenhum argumento (isto é, Circulo();), ele é denominado de construtor sem argumentos; IFSC/POO + JAVA - prof. Herval Daminelli Campo de dado da classe Dois métodos construtores da classe Dois métodos simples da classe IFSC/POO + JAVA - prof. Herval Daminelli Circulo -raio: double cor: string Significado das convenções 1. Todo campo de dado ou método sem sinal tem visibilidade padrão; 2. Todo campo ou método com o sinal de + é público; 3. Todo campo ou método com o sinal de – é privado; +Circle() +CalcularPerimetro(): double -AtribuirRaio(novoRaio: double): void TrocarCor(novaCor: string): void 4. Todo campo ou método sublinhado é estático (só pode ser usado por uma classe e não por um objeto); 5. Todo campo de dado deve especificar seu tipo; 6. Todo método deve especificar seu tipo de retorno e o nome e o tipo de cada parâmetro dentro dos parênteses. IFSC/POO + JAVA - prof. Herval Daminelli • Classes podem ser agrupadas em pacotes. Um pacote ou biblioteca de classes é apenas uma pasta criada para proporcionar um agrupamento conveniente e organizado de classes. Podemos criar nossos próprios pacotes e armazenarmos neles as classes que construímos em nossa aplicação; • A própria linguagem Java já traz muitas classes pré-escritas e prontas para serem utilizadas, organizadas em pacotes. Um pacote que contém uma coleção muito útil de classes e que já é automaticamente carregado pela JVM é java.lang; • Outros pacotes precisam ser importados para podermos usar suas classes – por exemplo, javax.swing (caixas de diálogo); • Para importar uma classe, você pode usar as declarações: import nome_do_pacote.*; ou import nome_do_pacote.nome_da_classe; • A primeira importa TODAS as classes dentro da biblioteca. A segunda importa somente a classe mencionada. IFSC/POO + JAVA - prof. Herval Daminelli