Objetivo OOP: Aproximar o mundo digital com o real.
Criador: Matemático e biólogo Alan Kay.
Coisa material ou abstrata que pode ser percebida pelos sentidos e descrita por meio das suas características(estado atual). Possui identidade única.
Define os atributos e métodos comuns que serão compartilhados por um conjunto de objetos.
O mesmo que o termo 'criação'. Uma classe instancia(cria) objetos, um objeto é uma instância(criação) de uma classe.
Diferente de métodos/classes abstratas, significa "enxugar" um conteúdo, tirando do mesmo só o essencial. Observar elemento(s), avaliando características e propriedades à parte.
Técnica pra proteger código. Criação de get e set pra proteger atributos privates. Ocultar partes independentes da implementação, permitindo construir partes invisíveis ao mundo exterior.
Vantagens:Método, com mesmo nome da classe, com a função criar instâncias de classe.
Técnica usada para criar métodos iguais, porém com outra forma de execução. Permite que um mesmo nome representa vários comportamentos diferentes. Só há polimorfismo quando há generalização entre classes.
Tipos:O mecanismo de ligação tardia entende que p1 é instância(criação) de Brasileiro, mesmo sendo "armazenado" dentro de Pessoa.
public class Main {
public static void main (String[] args) {
Pessoa p = new Pessoa("Ana");
Brasileiro b = new Brasileiro("Bob");
Cachorro c = new Cachorro();
Pessoa p1 = new Brasileiro("Rick");
b.setPet(c);
}
}
public class Cachorro {
private String nome;
public void setNome(String n) {this.nome = n;}
}
public class Pessoa {
private String nome;
public Pessoa(String nome) {this.nome = nome;}
public void comer() {QUADRADO}
public boolean comer(float qtde) {return false; BOLA}
}
public class Brasileiro extends Pessoa {
private Cachorro pet;
public Brasileiro(String nome) {super(nome);}
public void comer() {TRIÂNGULO}
public void setPet(Cachorro c) {this.pet = c;}
}
p1.comer(); //resultado TRIÂNGULO
p.comer(); //resultado QUADRADO
p1.comer(0.5); //resultado BOLA
b.comer(); //resultado TRIÂNGULO
Conceito geral, significa pegar algo de mesmo valor e atribuir incremento a ele.
Permite basear uma nova classe na definição de uma outra classe previamente existente. Quando uma classe herda os mesmos atributos e métodos de outra. Necessário incorporar todo o conteúdo na classe filha. Quando há herança para atribuir os valores aos atributos herdados, utilizar através do Construtor o super(atributos).
É aquele no qual cada objeto encapsula o valor do atributo (quando um atributo é do tipo de outra classe que criamos).
Tipo Objeto: Quando um atributo é do tipo de outra classe criada.
Ex: private Cachorro[] listac; public void addCachorro(){}
Constitui o nome e tipo do método. Isso, além do tipo, quantidade e ordem dos parâmetros do mesmo (O nome dos parâmetros não faz parte da assinatura, nem o tipo do retorno do método).
Precisa de return, devendo ser do mesmo tipo que o valor de retorno do método.
Ex: public int fazerAniver(...) {return ... -> int}
Não possui return, mas pode ter parâmetros também.
Ex: setNome()
Métodos com operações individuais, diferentes dos demais(comuns). São eles: Get(acessor), Set(modificador), Construct(criador).
Deve ser herdado, mas pode não ser sobrescrito(modificado).
Não pode ser herdada por outra classe. Obrigatoriamente folha.
Possui, na classe mãe, só a assinatura. Nas filhas(@override) será informado seu conteúdo interno.
Pode ou não ter métodos abstratos, se tiver ela obrigatoriamente terá de ser abstrata(não instancia objetos, só nas filhas).
Pode ser modificado, mas será o valor padrão para todos os objetos de que o possuírem(gravação única na memória). Não possui dependência de terceiros. Se utilizado em atributos, o atributo vira "atributo de classe".
Pode ser calculado através de outros atributos de classe. É implícito na classe (ele não é definido explicitamente), mas há métodos de acessá-lo.
Conjunto de valores dos atributos que o objeto possui. Ex: estado atual de Evento = cancelado.
Indicam o nível de acesso aos componentes internos de uma classe e/ou dela mesma.
Relação de classes, gera código diferenciado (definição do atributo). Um Canil é um agregado de Cachorro(0..*). "a classe B tem um atributo da classe A".
Ex: Classe Mercado addProduto(p1); //p1, instancia da classe Produto, foi criado na classe produto e só adicionado, sendo pronto, na classe Mercado.
Ex: Lutador * - disputa> -<> 0..* Luta.
Um Canil tem um ou mais Cachorros(1..*), não muda código.
public class Canil {
private Cachorro[];
ArrayList<Cachorro> listac;
public void addCachorro(Cachorro c){}
public void addCachorro(String nome, Date) {
Cachorro c = new Cachorro(nome, dtNasc);
this.listac.add(c); -> Associação: entre as classes gera o listac, pois possibilita instanciar o objeto que representa a parte fora de seu todo
} -> Composição: Canil depende de Nf, pois para criar uma Nf é necessário ter a classe da mesma
public NotaFiscal geraNota(Date data, double valor) {
NotaFiscal f = new NotaFiscal();
return f;
}
}
"Relaciona-se exclusivamente".
Um Canil é composto por 0..* Cachorros, então se não existir Canil, também não existirão Cachorros.
Ex: Classe Mercado mercado tem addProduto("vassoura",25.9); Objeto Produto não é criado na classe Produto, sendo dependente de sua criação na classe Mercado.
Ex: Na Agregação/Associação, os objetos que são adicionados na classe Canil, podem ter sido criados em outra classe. Na Composição, um Canil cria Cachorro.
Relacionamentos fracos, Realização e Dependência, não são armazenados em banco de dados.
Relacionamento fraco entre classes, quando um objeto manipula objetos de outra classe em seus métodos, mas não tem qualquer outro relacionamento com a classe dos objetos que manipula.
Ex: AddNf( ) Só posso criar Nf na classe Canil, porque a Canil depende do Nf para instanciar as mesmas, mas não há qualquer outro relacionamento entre a classe Nf e Canil.
Relacionamento entre Interface e Classe. Classe realiza o comportamento de uma Interface quando ocorre a implementação da mesma na primeira, permitindo assim o relacionamento "é um tipo de".
Lista de serviços fornecidos por um componente ou classe. É o contato com o mundo exterior (via abstração), que define o que pode ser feito com um objeto dessa classe. Possui, em sua composição, somente métodos public abstract que, por ventura, não possuem chaves de conteúdo interno, pelas quais todas as classes que implementarão (implements) 1 ou mais interfaces, terão de carregar(@override) todos os métodos abstratos informados(implements). Não precisa colocar abstract nos métodos na Interface, porque já entende-se que os mesmos nela são abstratos por padrão. Os métodos abstratos podem ter valor de retorno e parâmetros. Os atributos na interface devem ser static e final.
Elaborado por Mateus Schwede
ubsocial.github.io