Você está na página 1de 14

Instituto Federal do Paraná

Campus Palmas

Rafael Bogo, Luis Henrique Demarco Scatolin, Thiago Costa

Classes em Java

Palmas PR
29/06/2023
Introdução: As classes são um dos fundamentos da programação orientada a objetos.
Elas são como moldes ou esquemas que descrevem as características e os
comportamentos que um determinado objeto deve ter. Em outras palavras, uma classe
é um modelo ou um protótipo que define as variáveis e os métodos comuns a todos os
objetos de um certo tipo.
Por exemplo, considerando uma classe chamada "Cachorro", esta pode incluir variáveis
como raça, cor e idade, e métodos como latir, dormir e comer. Todos os objetos dessa
classe (cada "cachorro" individual) terão essas características e comportamentos.
A importância das classes é imensa. Aqui estão alguns motivos:
1. Reutilização de código e modularidade: Classes permitem que o código seja
reutilizado, o que economiza tempo e esforço. Uma vez definida uma classe, ela pode
ser usada para criar quantos objetos forem necessários. Além disso, cada classe pode
ser mantida como uma unidade separada, o que torna o código mais modular e fácil de
manter.
2. Encapsulamento: Classes fornecem a estrutura para encapsular dados e os métodos
que operam esses dados. Isso esconde a complexidade do código e protege os dados
de serem acessados diretamente, promovendo a segurança e a integridade dos dados.
3. Polimorfismo: Classes permitem polimorfismo, uma característica chave da OOP.
Isso significa que uma classe pode ter métodos que têm o mesmo nome, mas
comportamentos diferentes, dependendo dos argumentos que são passados.
4. Herança: Classes permitem o conceito de herança, onde uma "classe filha" pode
herdar os atributos e métodos de uma "classe mãe". Isso promove a reutilização do
código e uma organização lógica do código.

Métodos e Atributos
Atributos:
Os atributos são essencialmente variáveis que são definidas dentro de uma classe. Eles
representam o estado ou as características de um objeto. Por exemplo, se tivéssemos
uma classe chamada "Carro", os atributos podem ser "cor", "marca", "modelo" e
"ano". Cada instância (ou objeto) dessa classe terá seus próprios valores para esses
atributos.
Existem dois tipos principais de atributos: os de instância e os de classe. Os atributos
de instância são específicos para cada objeto, enquanto os atributos de classe são
compartilhados por todas as instâncias da classe.
Métodos:
Os métodos são como funções, mas são definidos dentro de uma classe e estão
associados aos objetos dessa classe. Eles representam o comportamento dos objetos e
podem acessar e operar nos atributos da classe. Por exemplo, na classe "Carro", você
pode ter métodos como "acelerar", "frear" e "virar".
Os métodos geralmente modificam o estado de um objeto ou realizam algum tipo de
cálculo baseado nos atributos do objeto. Além disso, é comum que eles retornem
algum valor.
Os métodos também podem ser classificados em diferentes tipos, tais como métodos
de instância, métodos de classe e métodos estáticos, dependendo de como eles
interagem com os atributos da classe.
Atributos e Métodos juntos:
A combinação de atributos e métodos dentro de uma classe permite modelar objetos
do mundo real de uma maneira muito intuitiva. Os atributos permitem definir as
características distintas de um objeto, enquanto os métodos permitem definir como o
objeto se comporta. Essa é uma das principais vantagens da programação orientada a
objetos: ela permite que os desenvolvedores modelam dados de maneira muito
natural e lógica.
Exemplo:
Encapsulamento e modificadores de acesso
O encapsulamento é um dos quatro princípios fundamentais da Programação
Orientada a Objetos (OOP), juntamente com a herança, o polimorfismo e a abstração.
Ele se refere à ideia de esconder os detalhes internos ou a implementação de um
objeto e expor apenas o que é necessário.
O encapsulamento é implementado em OOP usando modificadores de acesso. Eles
determinam a visibilidade dos atributos, métodos e outras partes de uma classe, ou
seja, onde essas partes podem ser acessadas. Os modificadores de acesso mais comuns
são: private, public e protected.
1. Private: Quando um atributo ou método é marcado como privado, ele só pode ser
acessado dentro da mesma classe. Isso significa que ele não pode ser acessado
diretamente de fora da classe ou por subclasses.
2. Public: Quando um atributo ou método é marcado como público, ele pode ser
acessado de qualquer lugar, seja dentro ou fora da classe, ou por uma subclasse.
3. Protected: Quando um atributo ou método é marcado como protegido, ele pode ser
acessado dentro da mesma classe e por suas subclasses, mas não diretamente de fora
da classe.
Há também o modificador "default" (sem modificador explícito), que torna o atributo
ou método acessível dentro do mesmo pacote.
Os modificadores de acesso são uma ferramenta essencial para o encapsulamento. Eles
permitem aos desenvolvedores controlar o acesso aos dados, protegendo-os de
alterações não autorizadas e prevenindo erros.
Encapsulamento é muito importante por várias razões:
Aumenta a segurança: Ao esconder os detalhes de implementação, os dados são
protegidos de alterações não autorizadas.
Melhora a modularidade: Como cada objeto controla seu próprio estado interno, o
sistema torna-se mais flexível e fácil de gerenciar.
Simplifica a interface: Com o encapsulamento, os outros objetos não precisam saber
como um objeto está implementado. Eles precisam apenas conhecer sua interface
pública.
Promove a manutenção e a evolução do código: Como os detalhes internos de um
objeto estão ocultos, eles podem ser alterados sem afetar outras partes do código.
Exemplo:
Instanciação de Objetos e Construtores de Classes
A instanciação de objetos e a criação de construtores de classes são conceitos
fundamentais na programação orientada a objetos.

Instanciação de Objetos:
A instanciação é o processo de criação de um objeto (uma instância) a partir de uma
classe. Quando você instancia uma classe, o sistema aloca memória para um novo
objeto e retorna uma referência a esse objeto. A nova instância herda todas as
variáveis e métodos da classe.

Construtores de Classe:
Um construtor é um método especial em uma classe que é chamado automaticamente
quando um novo objeto é criado a partir dessa classe. Ele geralmente tem o mesmo
nome da classe e não retorna nenhum valor.
Os construtores são normalmente usados para inicializar o estado de um objeto, ou
seja, para definir os valores iniciais de seus atributos. Por exemplo, um construtor para
a classe "Carro" pode aceitar parâmetros para definir a marca, o modelo e a cor do
carro:

Exemplo:
Tipos de Classes:
Em programação orientada a objetos, existem vários tipos de classes que podem ser
usados para atender a diferentes necessidades de modelagem. Vamos explorar alguns
dos principais tipos.

Classe Concreta:
Uma classe concreta é uma classe típica que pode ser instanciada. Ela pode ter
atributos e métodos (que podem ser abstratos ou não), e você pode criar objetos a
partir dessa classe. A maioria das classes que você cria em programação orientada a
objetos são classes concretas.
Exemplo:
Classe Abstrata:
Uma classe abstrata é uma classe que não pode ser instanciada. Ela é destinada a ser
estendida por outras classes. Uma classe abstrata pode conter métodos abstratos
(métodos sem corpo, apenas a declaração), bem como métodos concretos (métodos
com uma implementação específica).
Exemplo:
Classe Enum:
A classe Enum (ou simplesmente Enum) é um tipo especial de classe que representa
um grupo de constantes (variáveis que não mudam). Por exemplo, você pode ter um
Enum para os dias da semana, porque sempre há exatamente sete dias na semana e
isso não muda.
Exemplo:

Classe Anônima:
Uma classe anônima é uma classe sem nome que é declarada e instanciada em um
único comando. Elas são usadas quando você precisa de uma instância de uma classe
apenas uma vez. As classes anônimas são úteis em situações onde uma classe é usada
apenas uma vez durante a execução de um programa.
Classe Interna:
Uma classe interna, também conhecida como nested class, é uma classe definida
dentro de outra classe. Elas podem acessar membros (campos e métodos) da classe
externa, mesmo que sejam privados. Há quatro tipos de classes internas: inner class
(não estática), static nested class (estática), local inner class (definida dentro de um
bloco de código, geralmente dentro de um método) e anonymous inner class
(anônima).

Classe Final:
Uma classe final é uma classe que não pode ser estendida, ou seja, nenhuma outra
classe pode herdar dela. Isso é útil quando você quer garantir que a funcionalidade de
uma classe não seja alterada por subclasses.
Cada um desses tipos de classes tem seus usos e pode ser importante dependendo da
situação específica do problema que você está tentando resolver. Compreender as
diferenças e quando usar cada tipo é uma parte importante de se tornar um
programador orientado a objetos eficaz.
Exemplo:
Herança:
A herança é um princípio fundamental da programação orientada a objetos que
permite a uma classe herdar campos e métodos de outra. Em outras palavras, se temos
uma classe "Veículo" com atributos como "cor" e "peso" e métodos como "acelerar" e
"frear", e queremos criar uma classe "Carro", em vez de reescrever todos esses
atributos e métodos, podemos simplesmente fazer a classe "Carro" herdar da classe
"Veículo".
A herança promove a reutilização de código e a representação de relacionamentos do
tipo "é um". Por exemplo, um "Carro" é um "Veículo", então faz sentido que "Carro"
herde de "Veículo". No entanto, é importante usar a herança com cuidado, pois o uso
indevido pode levar a problemas de design.
Exemplo:
Polimorfismo:
O polimorfismo é outro conceito central na programação orientada a objetos. A palavra
"polimorfismo" vem do grego e significa "muitas formas". Em programação, refere-se à
capacidade de um objeto ser tratado como uma instância de sua própria classe ou de
qualquer classe de sua hierarquia de herança.
Um benefício do polimorfismo é que ele permite que o mesmo código funcione com
diferentes tipos de objetos. Por exemplo, se tivermos um método que opera em
objetos da classe "Veículo", graças ao polimorfismo, podemos passar para esse método
objetos da classe "Carro" ou qualquer outra classe que herde de "Veículo".

Exemplo:
Interface:
Uma interface é um tipo de referência em Java e outros idiomas que definem um
contrato para as classes implementarem. Ela define um conjunto de métodos (sem
implementação) que as classes devem implementar.
Uma interface é útil quando queremos garantir que determinadas classes tenham
certos métodos, mas não nos importamos com a implementação específica desses
métodos. Por exemplo, podemos ter uma interface "Dirigível" com um método
"dirigir". Qualquer classe que implemente a interface "Dirigível" (como "Carro" ou
"Motocicleta") terá que implementar o método "dirigir".
Em resumo, herança, polimorfismo e interfaces são conceitos essenciais na
programação orientada a objetos. A herança permite que as classes compartilhem
código e formem hierarquias. O polimorfismo permite que o mesmo código funcione
com diferentes tipos de objetos. E as interfaces permitem definir contratos que as
classes devem seguir, garantindo um certo nível de funcionalidade.

Exemplo:
Referências:

Classes, Objetos, Atributos, Métodos, e Construtores:

Oracle Java Documentation: Classes

Oracle Java Documentation: Objects

Oracle Java Documentation: Variables

Oracle Java Documentation: Methods

Oracle Java Documentation: Constructors

Encapsulamento e Modificadores de Acesso:

Oracle Java Documentation: Controlling Access to Members of a Class

Instanciação de Objetos:

Oracle Java Documentation: Creating Objects

Tipos de Classes (Concreta, Abstrata, Enum, Anônima, Interna, Final):

Oracle Java Documentation: Abstract Classes and Methods

Oracle Java Documentation: Enum Types


Oracle Java Documentation: Anonymous Classes

Oracle Java Documentation: Nested Classes

Oracle Java Documentation: Final Classes

Herança, Polimorfismo, e Interface:

Oracle Java Documentation: Inheritance

Oracle Java Documentation: Polymorphism

Oracle Java Documentation: Interfaces

Você também pode gostar