Programação Orientado a Objetos
JAVA
Nelson Oliveira Sessão 4
É proibido a utilização deste recurso sem prévia autorização
Objetivo Geral
• Desenvolver habilidades fundamentais em programação
Java, com foco na criação de métodos eficazes, compreensão
e implementação do encapsulamento de dados, e na
construção de classes imutáveis, para produzir código seguro,
reutilizável e de fácil manutenção.
Objetivos Específicos
• Dominar a Criação e Uso de Métodos: Aprender a sintaxe para a definição de
métodos em Java, aplicar a sobrecarga de métodos de forma eficaz para melhorar a
flexibilidade e a clareza do código.
• Implementar o Encapsulamento de Dados: Utilizar modificadores de acesso para
restringir o acesso aos componentes de uma classe, projetar métodos get e set quando
apropriado, e garantir a segurança e a integridade dos dados de objetos.
• Construir Classes Imutáveis: Praticar a criação de classes que não permitam a
modificação do seu estado após a criação, usando campos finais e inicializando todos
os atributos no construtor para promover o uso seguro em ambientes concorrentes.
• Aplicar Princípios de Programação Orientada a Objetos (POO): Reforçar
conceitos como herança, polimorfismo e abstração para projetar sistemas robustos e
extensíveis, utilizando interfaces e classes abstratas quando necessário.
• Desenvolver com Boas Práticas de Programação: Escrever código limpo e bem-
documentado, seguindo convenções de nomenclatura e padrões de design, para
facilitar a leitura, a manutenção e a colaboração em projetos de software.
Designing Methods
Um método em Java é definido com uma estrutura específica que inclui:
• Modificador de acesso: Define a visibilidade do método. Os modificadores
mais comuns são public, private e protected.
• Tipo de retorno: Especifica o tipo de dado que o método retornará. Se o
método não retornar nenhum valor, utiliza-se void.
• Nome do método: Um identificador que é usado para chamar o método.
Deve ser único dentro de uma classe se tiver a mesma lista de parâmetros.
• Lista de parâmetros: Parênteses que contêm zero ou mais parâmetros que o
método pode receber. Os parâmetros são variáveis que permitem a passagem
de valores para o método.
• Corpo do método: Um bloco de código delimitado por chaves { } que define
as instruções que serão executadas quando o método for chamado
Designing Methods
Exemplo simples de um método chamado soma, que recebe dois
números inteiros como parâmetros e retorna a soma desses números
Para chamar um método, precisa usar o nome do método seguido por
parênteses. Se o método exigir parâmetros, deve ser passado os valores
correspondentes dentro dos parênteses.
Designing Methods
Métodos que não retornam nenhum valor têm seu tipo de retorno
definido como void. Eles podem realizar tarefas, como imprimir algo na
tela, mas não retornam dados ao chamador. Por exemplo:
Métodos são ferramentas poderosas em Java, permitindo organizar o
código de maneira lógica e reutilizável. Compreender como criar e
utilizar métodos é fundamental para qualquer desenvolvedor Java
Acces Modifiers
Em Java, modificadores de acesso são palavras-chave que definem a visibilidade de classes,
métodos, construtores e variáveis. Eles determinam de onde esses membros podem ser
acessados no código. Existem quatro tipos principais de modificadores de acesso em Java:
• Private - visível apenas dentro da própria classe
• Utilizado para proteger os dados e métodos de serem acessados diretamente de fora da classe. Isso é
uma parte fundamental do encapsulamento.
• Default - visível apenas dentro do mesmo pacote
• Se nenhum modificador de acesso é especificado, o membro é acessível por qualquer classe dentro do
mesmo pacote. Não é utilizado o termo "default" na declaração.
• Protected - visível dentro do mesmo pacote e por subclasses
• Útil quando se quer permitir subclacess acesso a membros da classe pai.
• Public - visível para qualquer classe
• Permite o acesso aos membros de uma classe de qualquer outra classe, independentemente do
pacote/package em que está inserido.
Acces Modifiers
Modificador Classe Pacote Subclasse Mundo
private Sim Não Não Não
default Sim Sim Não Não
protected Sim Sim Sim Não
public Sim Sim Sim Sim
O uso adequado dos modificadores de acesso é crucial para a segurança e a boa arquitetura do
software, permitindo um encapsulamento eficaz e a separação de preocupações dentro de um
programa
Métodos e Variáveis Estáticos
Os métodos estáticos e campos (ou variáveis) estáticos em Java são membros da classe,
ao invés de pertencerem a uma instância específica da classe. Eles são compartilhados
entre todas as instâncias da classe
Campos Estáticos (fields): Um campo estático é uma variável que pertence à classe,
não a uma instância específica dela. Existe apenas uma cópia desse campo,
independentemente de quantas instâncias da classe são criadas. Campos estáticos são
frequentemente usados para armazenar uma constante ou uma variável que deve ser
compartilhada por todas as instâncias da classe.
Métodos Estáticos (Static Methods): Um método estático pertence à classe em vez de
pertencer a qualquer objeto da classe. Assim como os campos estáticos, há apenas uma
cópia do método, independentemente do número de instâncias da classe
Métodos estáticos são geralmente utilizados para realizar operações que não
dependem do estado de instâncias específicas. Exemplos comuns incluem métodos
utilitários ou funções que operam sobre parâmetros fornecidos e retornam um resultado
sem modificar o estado do objeto
Important Notes
Acesso: Campos e métodos estáticos são acessados diretamente usando o nome da
classe, não a referência de uma instância.
Não pode acessar membros não estáticos diretamente: Métodos estáticos não
podem acessar campos de instância ou métodos de instância diretamente. Eles só
podem acessar outros membros estáticos diretamente.
Uso comum: Constantes (public static final), utilitários ou funções matemáticas
geralmente são implementados como membros estáticos.
Quando Usar
Quando uma propriedade deve ser compartilhada por todas as instâncias da
classe.
Quando um método não requer acesso ao estado de qualquer instância da classe.
Os membros estáticos são úteis, mas seu uso deve ser bem considerado, pois
podem levar a um design menos orientado a objetos, dificultando a testabilidade e
o isolamento de componentes.
STATIC VS INSTANCE
Passing Data
Passar dados entre métodos em Java é um conceito fundamental que
permite a comunicação e o compartilhamento de informações dentro de
um programa. Isso é feito principalmente de duas maneiras: passando
argumentos para métodos e retornando valores de métodos
Quando um método é chamado dados podem ser passados para ele, que
são conhecidos como argumentos ou parâmetros. Esses dados são
utilizados pelo método para realizar suas operações. Os argumentos são
definidos na declaração do método e passados na chamada do método.
Neste exemplo, os valores de a e b são passados para o método soma, que os utiliza para calcular a
soma e retornar o resultado.
Passing Data
Retornando Valores de Métodos
Métodos em Java podem retornar um valor. O tipo de retorno do método
é especificado em sua declaração e pode ser um tipo primitivo (como int,
double), um objeto (como uma instância de uma classe), ou void se o
método não retornar nada. Quando um método retorna um valor, esse
valor pode ser usado diretamente em expressões, atribuído a variáveis, ou
passado como argumento para outros métodos.
Neste exemplo, o método criarMensagem retorna uma string que é atribuída à variável mensagem
e então usada.
Passing Data
• Tipos de dados: Java é uma linguagem de programação de tipo
estático, o que significa que os tipos de dados dos parâmetros de um
método e o tipo de seu valor de retorno devem ser conhecidos em
tempo de compilação.
• Passagem por valor: Java sempre passa argumentos por valor. Isso
significa que uma cópia do valor é passada para os métodos. Para tipos
primitivos, a cópia do valor é usada diretamente. Para objetos, a cópia
da referência ao objeto é passada, mas ainda assim é uma cópia, então a
referência original não pode ser alterada, embora o objeto ao qual ela
aponta possa ser modificado dentro do método.
Overloading de Métodos
O sobrecarregamento de métodos (overloading) é um recurso da
programação orientada a objetos que permite a uma classe ter mais de um
método com o mesmo nome, desde que as suas assinaturas sejam diferentes. A
assinatura de um método é composta pelo seu nome e pela lista de parâmetros
(tipo e ordem dos parâmetros).
• Regras para Sobrecarregar Métodos
• Nomes iguais: Os métodos devem ter o mesmo nome.
• Assinaturas diferentes: Os métodos devem ter diferentes listas de parâmetros.
Isso pode significar um número diferente de parâmetros, tipos diferentes de
parâmetros, ou uma ordem diferente dos tipos, caso haja múltiplos parâmetros.
• Retorno do método: Mudar somente o tipo de retorno não conta como
sobrecarregamento válido, a menos que também se mude a assinatura dos
parâmetros.
Important Notes
 Melhoria na legibilidade do código: Permite usar o mesmo nome de
método para realizar ações similares, o que torna o código mais intuitivo.
 Flexibilidade no desenvolvimento: Você pode oferecer versões de um
método que funcionem com diferentes tipos ou números de argumentos,
tornando suas classes mais fáceis de usar e adaptáveis.
 Simplificação de nomes de métodos: Evita a necessidade de criar e
lembrar de vários nomes para métodos que realizam ações similares, mas
com diferentes parâmetros.
• O sobrecarregamento é um conceito fundamental em Java e um bloco de
construção importante para a criação de APIs intuitivas e fáceis de usar.
Creating Constructors
Os construtores em Java são métodos especiais utilizados para inicializar
objetos. Quando cria um novo objeto, o construtor é automaticamente
chamado, definindo o estado inicial do objeto. Os construtores têm o mesmo
nome da classe e não possuem tipo de retorno, nem mesmo void.
Características dos Construtores
• Mesmo Nome da Classe: O nome do construtor deve ser exatamente igual
ao nome da classe.
• Sem Tipo de Retorno: Os construtores não especificam um tipo de retorno,
nem mesmo void.
• Invocação Automática: Quando cria um objeto utilizando a palavra-chave
new, o construtor correspondente é automaticamente chamado.
• Sobrecarga: O Java suporta a sobrecarga de construtores, permitindo que
uma classe tenha mais de um construtor com listas de parâmetros diferentes.
Creating Constructors
Construtor Padrão
Se não definir explicitamente um construtor na sua classe, o Java fornece
automaticamente um construtor padrão que não tem parâmetros e não
executa nenhuma ação especial. Este construtor padrão inicializará os
campos do objeto com os seus valores padrão (por exemplo, 0 para
inteiros, null para objetos).
Construtores Personalizados
Pode definir os seus próprios construtores para inicializar os objetos de
uma forma específica. Aqui está como criar e usar construtores
personalizados.
Creating Constructors
Sobrecarga de Construtores
Pode ter vários construtores numa classe, cada um com uma lista de
parâmetros diferente. Isto é conhecido como sobrecarga de construtores
e permite inicializar objetos de diferentes maneiras.
Utilize construtores para estabelecer condições iniciais para os seus
objetos.
A palavra-chave this refere-se ao objeto atual e é frequentemente usada
para distinguir entre campos da classe e parâmetros do construtor.
A sobrecarga de construtores aumenta a flexibilidade de uma classe,
permitindo que objetos sejam inicializados de diferentes maneiras.
Encapsulating Data
Encapsulamento é um dos pilares fundamentais da programação orientada a
objetos (POO), referindo-se à prática de ocultar os detalhes internos ou a
implementação de um objeto e apenas expor uma interface pública. Essa técnica é
usada para restringir o acesso direto aos dados de um objeto e aos métodos que
operam nesses dados. Em Java, o encapsulamento é geralmente realizado usando
modificadores de acesso nas variáveis e métodos de uma classe.
 Passos para Encapsular Dados
 Declare as variáveis de classe como private: Isso restringe o acesso direto de fora da
classe, protegendo os dados contra alterações indesejadas.
 Forneça métodos públicos getter e setter: Estes métodos são a interface pública para
acessar e modificar as variáveis privadas. O método getter retorna o valor da variável,
enquanto o método setter permite modificar o valor.
Encapsulating Data
Benefícios do Encapsulamento
Proteção dos dados: Previne que o estado interno dos objetos seja
alterado de maneira inesperada ou imprópria.
Flexibilidade e manutenção: Encapsular permite mudar a
implementação interna sem afetar os outros lugares do seu código que
dependem dessa classe. Isso facilita a manutenção e a evolução do software.
Controle de acesso: Com métodos setter, você pode adicionar validação
antes de alterar os dados, garantindo que o objeto permaneça em um estado
consistente.
O encapsulamento é uma técnica essencial que ajuda a proteger os dados
dentro de uma classe e a criar código mais seguro, flexível e fácil de manter.
Creating Immutable Classes
Uma classe imutável é uma classe cujos objetos não podem ser modificados depois de criados. Isso significa que, uma vez que você
cria uma instância de uma classe imutável, o estado dessa instância não pode mudar durante todo o seu ciclo de vida.
Use final na Classe
Isso impede que a classe seja estendida, garantindo que ninguém possa criar subclasses que alterem seu
comportamento de imutabilidade.
Torne Todos os Campos Privados e Finais
Campos privados garantem que não possam ser acessados diretamente de fora da classe. Campos finais significam
que eles devem ser inicializados no momento da criação do objeto e não podem ser modificados posteriormente.
Não Forneça Métodos set
Se não houver métodos set, não há maneira de alterar os valores dos campos depois que o objeto é criado.
Crie um Construtor que Inicialize Todos os Campos
Como os campos são finais, eles precisam ser inicializados quando o objeto é criado. Fazemos isso através de um
construtor que recebe todos os valores necessários.
Fornecer Apenas Métodos get
Métodos get são fornecidos para acessar os valores dos campos, mas como não há métodos set, esses valores não
podem ser alterados.
Creating Immutable Classes
Na imagem anterior, uma vez que uma Pessoa é criada com um nome e
idade, esses valores não podem ser mudados. Modificar nome ou idade
diretamente, vai retornar um erro de compilação, pois não existem métodos
para alterar esses campos após a criação do objeto.
Benefícios
Simplicidade: Fácil de entender e usar.
Segurança: Não há preocupações com alterações inesperadas no estado
do objeto.
Thread-safe: Seguro para usar em ambientes multithread sem
sincronização adicional.
Essa é a essência da criação e dos benefícios de uma classe imutável em
Programação Orientado a Objetos - Sessao 4.pptx

Programação Orientado a Objetos - Sessao 4.pptx

  • 1.
    Programação Orientado aObjetos JAVA Nelson Oliveira Sessão 4 É proibido a utilização deste recurso sem prévia autorização
  • 2.
    Objetivo Geral • Desenvolverhabilidades fundamentais em programação Java, com foco na criação de métodos eficazes, compreensão e implementação do encapsulamento de dados, e na construção de classes imutáveis, para produzir código seguro, reutilizável e de fácil manutenção.
  • 3.
    Objetivos Específicos • Dominara Criação e Uso de Métodos: Aprender a sintaxe para a definição de métodos em Java, aplicar a sobrecarga de métodos de forma eficaz para melhorar a flexibilidade e a clareza do código. • Implementar o Encapsulamento de Dados: Utilizar modificadores de acesso para restringir o acesso aos componentes de uma classe, projetar métodos get e set quando apropriado, e garantir a segurança e a integridade dos dados de objetos. • Construir Classes Imutáveis: Praticar a criação de classes que não permitam a modificação do seu estado após a criação, usando campos finais e inicializando todos os atributos no construtor para promover o uso seguro em ambientes concorrentes. • Aplicar Princípios de Programação Orientada a Objetos (POO): Reforçar conceitos como herança, polimorfismo e abstração para projetar sistemas robustos e extensíveis, utilizando interfaces e classes abstratas quando necessário. • Desenvolver com Boas Práticas de Programação: Escrever código limpo e bem- documentado, seguindo convenções de nomenclatura e padrões de design, para facilitar a leitura, a manutenção e a colaboração em projetos de software.
  • 4.
    Designing Methods Um métodoem Java é definido com uma estrutura específica que inclui: • Modificador de acesso: Define a visibilidade do método. Os modificadores mais comuns são public, private e protected. • Tipo de retorno: Especifica o tipo de dado que o método retornará. Se o método não retornar nenhum valor, utiliza-se void. • Nome do método: Um identificador que é usado para chamar o método. Deve ser único dentro de uma classe se tiver a mesma lista de parâmetros. • Lista de parâmetros: Parênteses que contêm zero ou mais parâmetros que o método pode receber. Os parâmetros são variáveis que permitem a passagem de valores para o método. • Corpo do método: Um bloco de código delimitado por chaves { } que define as instruções que serão executadas quando o método for chamado
  • 5.
    Designing Methods Exemplo simplesde um método chamado soma, que recebe dois números inteiros como parâmetros e retorna a soma desses números Para chamar um método, precisa usar o nome do método seguido por parênteses. Se o método exigir parâmetros, deve ser passado os valores correspondentes dentro dos parênteses.
  • 6.
    Designing Methods Métodos quenão retornam nenhum valor têm seu tipo de retorno definido como void. Eles podem realizar tarefas, como imprimir algo na tela, mas não retornam dados ao chamador. Por exemplo: Métodos são ferramentas poderosas em Java, permitindo organizar o código de maneira lógica e reutilizável. Compreender como criar e utilizar métodos é fundamental para qualquer desenvolvedor Java
  • 7.
    Acces Modifiers Em Java,modificadores de acesso são palavras-chave que definem a visibilidade de classes, métodos, construtores e variáveis. Eles determinam de onde esses membros podem ser acessados no código. Existem quatro tipos principais de modificadores de acesso em Java: • Private - visível apenas dentro da própria classe • Utilizado para proteger os dados e métodos de serem acessados diretamente de fora da classe. Isso é uma parte fundamental do encapsulamento. • Default - visível apenas dentro do mesmo pacote • Se nenhum modificador de acesso é especificado, o membro é acessível por qualquer classe dentro do mesmo pacote. Não é utilizado o termo "default" na declaração. • Protected - visível dentro do mesmo pacote e por subclasses • Útil quando se quer permitir subclacess acesso a membros da classe pai. • Public - visível para qualquer classe • Permite o acesso aos membros de uma classe de qualquer outra classe, independentemente do pacote/package em que está inserido.
  • 8.
    Acces Modifiers Modificador ClassePacote Subclasse Mundo private Sim Não Não Não default Sim Sim Não Não protected Sim Sim Sim Não public Sim Sim Sim Sim O uso adequado dos modificadores de acesso é crucial para a segurança e a boa arquitetura do software, permitindo um encapsulamento eficaz e a separação de preocupações dentro de um programa
  • 9.
    Métodos e VariáveisEstáticos Os métodos estáticos e campos (ou variáveis) estáticos em Java são membros da classe, ao invés de pertencerem a uma instância específica da classe. Eles são compartilhados entre todas as instâncias da classe Campos Estáticos (fields): Um campo estático é uma variável que pertence à classe, não a uma instância específica dela. Existe apenas uma cópia desse campo, independentemente de quantas instâncias da classe são criadas. Campos estáticos são frequentemente usados para armazenar uma constante ou uma variável que deve ser compartilhada por todas as instâncias da classe. Métodos Estáticos (Static Methods): Um método estático pertence à classe em vez de pertencer a qualquer objeto da classe. Assim como os campos estáticos, há apenas uma cópia do método, independentemente do número de instâncias da classe Métodos estáticos são geralmente utilizados para realizar operações que não dependem do estado de instâncias específicas. Exemplos comuns incluem métodos utilitários ou funções que operam sobre parâmetros fornecidos e retornam um resultado sem modificar o estado do objeto
  • 11.
    Important Notes Acesso: Campose métodos estáticos são acessados diretamente usando o nome da classe, não a referência de uma instância. Não pode acessar membros não estáticos diretamente: Métodos estáticos não podem acessar campos de instância ou métodos de instância diretamente. Eles só podem acessar outros membros estáticos diretamente. Uso comum: Constantes (public static final), utilitários ou funções matemáticas geralmente são implementados como membros estáticos. Quando Usar Quando uma propriedade deve ser compartilhada por todas as instâncias da classe. Quando um método não requer acesso ao estado de qualquer instância da classe. Os membros estáticos são úteis, mas seu uso deve ser bem considerado, pois podem levar a um design menos orientado a objetos, dificultando a testabilidade e o isolamento de componentes.
  • 12.
  • 13.
    Passing Data Passar dadosentre métodos em Java é um conceito fundamental que permite a comunicação e o compartilhamento de informações dentro de um programa. Isso é feito principalmente de duas maneiras: passando argumentos para métodos e retornando valores de métodos Quando um método é chamado dados podem ser passados para ele, que são conhecidos como argumentos ou parâmetros. Esses dados são utilizados pelo método para realizar suas operações. Os argumentos são definidos na declaração do método e passados na chamada do método.
  • 14.
    Neste exemplo, osvalores de a e b são passados para o método soma, que os utiliza para calcular a soma e retornar o resultado.
  • 15.
    Passing Data Retornando Valoresde Métodos Métodos em Java podem retornar um valor. O tipo de retorno do método é especificado em sua declaração e pode ser um tipo primitivo (como int, double), um objeto (como uma instância de uma classe), ou void se o método não retornar nada. Quando um método retorna um valor, esse valor pode ser usado diretamente em expressões, atribuído a variáveis, ou passado como argumento para outros métodos.
  • 16.
    Neste exemplo, ométodo criarMensagem retorna uma string que é atribuída à variável mensagem e então usada.
  • 17.
    Passing Data • Tiposde dados: Java é uma linguagem de programação de tipo estático, o que significa que os tipos de dados dos parâmetros de um método e o tipo de seu valor de retorno devem ser conhecidos em tempo de compilação. • Passagem por valor: Java sempre passa argumentos por valor. Isso significa que uma cópia do valor é passada para os métodos. Para tipos primitivos, a cópia do valor é usada diretamente. Para objetos, a cópia da referência ao objeto é passada, mas ainda assim é uma cópia, então a referência original não pode ser alterada, embora o objeto ao qual ela aponta possa ser modificado dentro do método.
  • 18.
    Overloading de Métodos Osobrecarregamento de métodos (overloading) é um recurso da programação orientada a objetos que permite a uma classe ter mais de um método com o mesmo nome, desde que as suas assinaturas sejam diferentes. A assinatura de um método é composta pelo seu nome e pela lista de parâmetros (tipo e ordem dos parâmetros). • Regras para Sobrecarregar Métodos • Nomes iguais: Os métodos devem ter o mesmo nome. • Assinaturas diferentes: Os métodos devem ter diferentes listas de parâmetros. Isso pode significar um número diferente de parâmetros, tipos diferentes de parâmetros, ou uma ordem diferente dos tipos, caso haja múltiplos parâmetros. • Retorno do método: Mudar somente o tipo de retorno não conta como sobrecarregamento válido, a menos que também se mude a assinatura dos parâmetros.
  • 20.
    Important Notes  Melhoriana legibilidade do código: Permite usar o mesmo nome de método para realizar ações similares, o que torna o código mais intuitivo.  Flexibilidade no desenvolvimento: Você pode oferecer versões de um método que funcionem com diferentes tipos ou números de argumentos, tornando suas classes mais fáceis de usar e adaptáveis.  Simplificação de nomes de métodos: Evita a necessidade de criar e lembrar de vários nomes para métodos que realizam ações similares, mas com diferentes parâmetros. • O sobrecarregamento é um conceito fundamental em Java e um bloco de construção importante para a criação de APIs intuitivas e fáceis de usar.
  • 21.
    Creating Constructors Os construtoresem Java são métodos especiais utilizados para inicializar objetos. Quando cria um novo objeto, o construtor é automaticamente chamado, definindo o estado inicial do objeto. Os construtores têm o mesmo nome da classe e não possuem tipo de retorno, nem mesmo void. Características dos Construtores • Mesmo Nome da Classe: O nome do construtor deve ser exatamente igual ao nome da classe. • Sem Tipo de Retorno: Os construtores não especificam um tipo de retorno, nem mesmo void. • Invocação Automática: Quando cria um objeto utilizando a palavra-chave new, o construtor correspondente é automaticamente chamado. • Sobrecarga: O Java suporta a sobrecarga de construtores, permitindo que uma classe tenha mais de um construtor com listas de parâmetros diferentes.
  • 22.
    Creating Constructors Construtor Padrão Senão definir explicitamente um construtor na sua classe, o Java fornece automaticamente um construtor padrão que não tem parâmetros e não executa nenhuma ação especial. Este construtor padrão inicializará os campos do objeto com os seus valores padrão (por exemplo, 0 para inteiros, null para objetos). Construtores Personalizados Pode definir os seus próprios construtores para inicializar os objetos de uma forma específica. Aqui está como criar e usar construtores personalizados.
  • 24.
    Creating Constructors Sobrecarga deConstrutores Pode ter vários construtores numa classe, cada um com uma lista de parâmetros diferente. Isto é conhecido como sobrecarga de construtores e permite inicializar objetos de diferentes maneiras. Utilize construtores para estabelecer condições iniciais para os seus objetos. A palavra-chave this refere-se ao objeto atual e é frequentemente usada para distinguir entre campos da classe e parâmetros do construtor. A sobrecarga de construtores aumenta a flexibilidade de uma classe, permitindo que objetos sejam inicializados de diferentes maneiras.
  • 26.
    Encapsulating Data Encapsulamento éum dos pilares fundamentais da programação orientada a objetos (POO), referindo-se à prática de ocultar os detalhes internos ou a implementação de um objeto e apenas expor uma interface pública. Essa técnica é usada para restringir o acesso direto aos dados de um objeto e aos métodos que operam nesses dados. Em Java, o encapsulamento é geralmente realizado usando modificadores de acesso nas variáveis e métodos de uma classe.  Passos para Encapsular Dados  Declare as variáveis de classe como private: Isso restringe o acesso direto de fora da classe, protegendo os dados contra alterações indesejadas.  Forneça métodos públicos getter e setter: Estes métodos são a interface pública para acessar e modificar as variáveis privadas. O método getter retorna o valor da variável, enquanto o método setter permite modificar o valor.
  • 28.
    Encapsulating Data Benefícios doEncapsulamento Proteção dos dados: Previne que o estado interno dos objetos seja alterado de maneira inesperada ou imprópria. Flexibilidade e manutenção: Encapsular permite mudar a implementação interna sem afetar os outros lugares do seu código que dependem dessa classe. Isso facilita a manutenção e a evolução do software. Controle de acesso: Com métodos setter, você pode adicionar validação antes de alterar os dados, garantindo que o objeto permaneça em um estado consistente. O encapsulamento é uma técnica essencial que ajuda a proteger os dados dentro de uma classe e a criar código mais seguro, flexível e fácil de manter.
  • 29.
    Creating Immutable Classes Umaclasse imutável é uma classe cujos objetos não podem ser modificados depois de criados. Isso significa que, uma vez que você cria uma instância de uma classe imutável, o estado dessa instância não pode mudar durante todo o seu ciclo de vida. Use final na Classe Isso impede que a classe seja estendida, garantindo que ninguém possa criar subclasses que alterem seu comportamento de imutabilidade. Torne Todos os Campos Privados e Finais Campos privados garantem que não possam ser acessados diretamente de fora da classe. Campos finais significam que eles devem ser inicializados no momento da criação do objeto e não podem ser modificados posteriormente. Não Forneça Métodos set Se não houver métodos set, não há maneira de alterar os valores dos campos depois que o objeto é criado. Crie um Construtor que Inicialize Todos os Campos Como os campos são finais, eles precisam ser inicializados quando o objeto é criado. Fazemos isso através de um construtor que recebe todos os valores necessários. Fornecer Apenas Métodos get Métodos get são fornecidos para acessar os valores dos campos, mas como não há métodos set, esses valores não podem ser alterados.
  • 31.
    Creating Immutable Classes Naimagem anterior, uma vez que uma Pessoa é criada com um nome e idade, esses valores não podem ser mudados. Modificar nome ou idade diretamente, vai retornar um erro de compilação, pois não existem métodos para alterar esses campos após a criação do objeto. Benefícios Simplicidade: Fácil de entender e usar. Segurança: Não há preocupações com alterações inesperadas no estado do objeto. Thread-safe: Seguro para usar em ambientes multithread sem sincronização adicional. Essa é a essência da criação e dos benefícios de uma classe imutável em

Notas do Editor