linguagem (estruturada) ALGOL poderia ser movida para HEAP (área de memória não necessariamente ordenada, diferente da stack)possibilitando que as variáveis locais declaradas por uma função existissem muito depois que a função retornasse…” Robert “Uncle Bob” Martin livro Arquitetura Limpa
um O.O é bem simples. Em códigos procedurais (…) escolher o melhor algoritmo é o mais importante (…) Já em linguagens orientado a objetos (…) pensar no projeto de classes (…) como se encaixam (…) e como serão estendidas é o que mais importa.” Maurício Aniche livro Orientação a Objetos e SOLID para Ninjas
uma casa, nós fazemos uma planta baixa. Ela será o modelo que utilizaremos para construir algo concreto. As classes funcionam de forma parecida. Vamos a um exemplo prático.
modelo que podemos seguir. O que podemos fazer com esse modelo? Bom... Nós fizemos a analogia da casa, certo? Depois de termos a planta baixa, nós começamos a construir. E o resultado do que nós construímos, vamos chamar de objeto.
Pessoa - mostrada no código anterior – para criar um objeto, nós diremos que estamos instanciando um objeto da classe Pessoa. E esse termo é bem simples de entender. O que acontece é que podemos criar vários objetos de uma mesma classe, ou seja, várias instâncias de objetos.
Pessoa - mostrada no código anterior – para criar um objeto, nós diremos que estamos instanciando um objeto da classe Pessoa E esse termo é bem simples de entender. O que acontece é que podemos criar vários objetos de uma mesma classe, ou seja, várias instâncias de objetos.
definimos como nome. Foi tão intuitivo nós pensarmos que uma pessoa teria um nome que nem demos importância a ele. O nome é uma característica de uma Pessoa e pode ser diferente de pessoa para pessoa. O nome é um atributo da pessoa.
definimos como nome. Foi tão intuitivo nós pensarmos que uma pessoa teria um nome que nem demos importância a ele. O nome é uma característica de uma Pessoa e pode ser diferente de pessoa para pessoa. O nome é um atributo da pessoa.
pode ter ações. Por exemplo, uma pessoa pode falar. Pensando em um cenário mais específico, uma pessoa pode falar o seu nome. As ações que nós definimos que uma classe pode ter, nós chamamos de métodos.
vamos construir um objeto. Por meio de um construtor, criamos um objeto baseado em uma Classe e assim o alocamos em memória. Ao criarmos um objeto dizemos que estamos instanciando um objeto.
conceito de destrutor explícito. Lembra que falamos que quando instanciamos, estamos, na verdade, alocando o objeto em memória? Pois bem... Desalocar esse objeto fica por conta do GC.
Marca: String - Modelo: String - Ano: Integer - Variante: String - Essa classe deve garantir que Modelo, Marca e Ano sempre sejam passados na hora de instanciar um objeto.
trabalhando ao pé da letra. Quando falamos de encapsulamento, estamos falando efetivamente em proteger alguma informação de alguma forma, ou seja, com uma cápsula.
- Queremos que o nome possa ser alterado. Vamos pensar que uma pessoa pode casar e mudar seu nome; - Não queremos alterar a data de nascimento. A pessoa nasce com ela e não pode mudar; - Queremos de alguma forma retornar a idade da pessoa.
no contrato; - Consigo mudar meu nome posteriormente; - Consigo ler meu nome a qualquer momento; - Consigo apenas ler minha data de nascimento; - Consigo calcular quantos anos eu tenho sem precisar conhecer a implementação.
relação a utilização de herança. Algumas bibliografias inclusive defendem que ela nunca deve ser utilizada. E o grande problema tem relação com o nosso tópico anterior: o encapsulamento.
característica e uma ação que podem ser comuns aos dois, mas com algumas peculiaridades. Agora vamos querer calcular o valor aproximado do IPVA dos nossos diferentes tipos de veículos.
cálculo é baseado no valor venal do veículo. Portanto a primeira conclusão que chegamos é que temos uma característica nova na nossa Classe de Veículos, agora temos o valor venal, portanto:
partir do princípio que (valores hipotéticos): - Um veículo teria que pagar, no mínimo, 0,01% do valor venal de IPVA; - Um carro teria que pagar, no mínimo, 0,07% do valor venal de IPVA; - Uma moto teria que pagar, no mínimo, 0,03% do valor venal de IPVA.
Esses funcionários podem ser: Gerente, Supervisor e Atendente. Cada tipo de funcionário desses tem políticas diferentes de impostos: - Gerente paga 0,1% do salário; - Supervisor paga 0,05% do salário; - Atendente paga 0,01% do salário. Monte um modelo que atenda esse cenário.
transformar a nossa classe veículo. Ela vai passar a ser uma classe abstrata e, portanto, não poderá mais ser instanciada. E também vamos definir que o construtor dessa classe sempre irá esperar o modelo, a marca e o valor venal.
Object. E, portanto, tem por padrão alguns métodos. Um deles é o equals que serve para fazer comparações entre objetos. Entretanto esse método possui algumas peculiaridades.
a referência deles. Então se instanciarmos dois carros, por mais que eles tenham exatamente as mesmas informações, o Java não é capaz de identificar. Vejamos...
gerado que garanta um caráter único ao nosso objeto. Essa pode ser uma forma muito interessante para que possamos comparar se realmente um objeto é igual ao outro.