Skip to content

Latest commit

 

History

History
65 lines (52 loc) · 2.94 KB

README.org

File metadata and controls

65 lines (52 loc) · 2.94 KB

CATP #13 (Encapsulamento em OO)

O objetivo da atividade consiste em praticar os conceitos relacionados com orientação a objetos, em especial, encapsulamento. Também é importante prover estruturas de inicialização de instâncias e separação entre a interface visível a quem usa a classe e a sua implementação propriamente dita. O uso de espaços de nome (namespaces, etc.) também é estimulado.

Utilize C++ para implementar este exercício, com o compilador g++.

Implemente uma classe capaz de armazenar informações sobre pessoas, atentendo aos critérios abaixo:

  • A classe Pessoa deve ser capaz de armazenar e fornecer as seguintes informações sobre uma Pessoa. Repare que algumas das informações podem ser derivadas das outras (idade, por exemplo), não sendo necessário um atributo específico para representá-las.
    • nome (default: indefinido)
    • data de nascimento (default: dia atual)
    • sexo (default: indefinido)
    • idade (default: estabelecido com base na data de nascimento)
  • A classe deve garantir que os atributos acima sejam protegidos e que contenham somente os valores válidos (métodos modificadores adequados devem ser criados). Métodos que retornam valores devem cuidar para não quebrar o encapsulamento (no caso dos atributos serem mutáveis), retornando cópias completas e não a referência ao atributo original.
  • Crie dois construtores:
    • Construtor-padrão (inicializando todos os atributos).
    • Construtor que receba todos os parâmetros (nome, data de nascimento, sexo e localização), aceitando-os somente caso sejam válidos.

Por fim, elabore um programa que crie duas ou mais instâncias de Pessoa. Uma pessoa deve ser criada com o construtor padrão e outra com o construtor alternativo. Ao final, o programa deve imprimir na tela os valores dos atributos das instâncias, mostrando o seu conteúdo de forma adequada (de acordo com o tipo da instância).

Tente quebrar o encapsulamento acessando diretamente os campos da classe quando estes são privados, protegidos e públicos.

Exercício opcional

Criando cópias profundas

  • Ao usar C++, especifique um construtor de cópia que faça uma cópia profunda de todos os atributos da instância em questão. Especifique também uma sobrecarga do operator= para que faça igualmente uma cópia profunda.
  • Se estiver trabalhando com Java ou similar, sobrecarregue o método clone(), fazendo uma cópia profunda da instância.