# data[].attributes.body
Classes possuem relacionamentos entre elas (para comunicação):
-Compartilham informações;
-Colaboram umas com as outras;
Principais tipos de relacionamentos:
Associações: determina que as instâncias de uma classe estão de alguma forma ligadas às instâncias da outra classe;
Agregação:  demonstra que as informações de um objeto precisam ser complementadas por um objeto de outra classe;
Generalização/especialização:  são conceitos usados para representar objetos do mundo real que possuem os mesmos atributos e que podem ser categorizados e podem ser representados em uma hierarquia que mostra as dependências entre entidades de uma mesma categoria.
Classe associação: uma classe de associação é uma classe que faz parte de um relacionamento de associação entre outras classes.

Você pode conectar uma classe de associação a um relacionamento de associação para fornecer informações adicionais sobre o relacionamento

# data[].attributes.body
Trata-se em de um mecanismo que possibilita restringir o acesso a variáveis e métodos da classe(ou até a própria classe). Ver imagem, Por meio das restrições de acesso é possível assegurar que certas variáveis de instância tenham valores restritos que só podem ser acessados a partir da própria classe.

# data[].attributes.body
Se refere a algo herdado, em Java, a herança ocorre quando uma classe pode herdar características definidas em outra classe. Outro termo envolvido com herança é a especialização.
Uma vez que uma classe herda características de outra, ela pode implementar partes especificas não contempladas na classe original.

# data[].attributes.body
Para o uso mainstream é o que todo mundo conhece como invocação ou chamada de método. Ou seja, você chama um método e indica que objeto a que está se referindo.

Smalltalk é que a linguagem que originou o termo usa ele de forma mais correta e tem um significado mais importante e tem um sistema mais sofisticado de invocação, delegação e solução de método inexistente. Ou seja, o objeto tem uma infraestrutura para resolver o que de fato executar. A flexibilidade é enorme mas a performance costuma ser pobre.

# data[].attributes.body
Representa uma técnica avançada de programação, e seu uso pode gerar economia de recursos computacionais, a ideia geral do polimorfismo é que um objeto de uma determinada classe mais genérica possa assumir diferentes comportamentos.

# data[].attributes.body
Uma classe é composta por atributos e métodos, os atributos são os elementos que definem a estrutura de uma classe, são conhecidos  como variáveis de classe, e podem ser divididos em dois tipos básicos: atributos de instância e de classe.

# data[].attributes.headline
UML: estrutura e objetivo de cada diagrama

# data[].attributes.subject
UML: estrutura e objetivo de cada diagrama

# data[].attributes.body
Na UML os métodos são chamados de operações,   todos os atributos e métodos possuem visibilidade pública, representada na UML pelo caractere "+" ao lado esquerdo de cada nome.
O símbolo “+” refere-se a uma variável pública, “aumentarVolume()” e “void” estão presentes nas duas linguagens.

# data[].attributes.body
Existe vários tipos de objetos, mas todos partilham de uma coisa em comum, eles possuem um estado(conjunto de propriedades do objeto) e um comportamento( as ações possíveis sobre o objeto), como podemos observar na imagem 1.
Os objetos são criados a partir de classes. O objeto é uma instância da classe ( é como se fosse um cartão para entrar em uma biblioteca e sair com um livro para ler e depois devolver). A partir do momento que criamos uma classe podemos criar inúmeros objetos sem alterar a classes, pois ela é só um modelo.
Apesar de ter vários objetos criados de uma classe base cada um tem suas próprias informações.
Para a criação de uma classe usamos um qualificador definido sua visibilidade (Public e Private) assim podendo ser usado por outras classes ou não seus métodos.

Iniciamos uma classe da seguinte forma :

Qualificador class nome-da-classe {
// atributos
// métodos
}

Na pratica poderia ficar assim:

Public class carro{
// potencia, valor, ano
// pegaAno, PegaValor e PegaPotencia

}

# data[].attributes.body
Em programação, um diagrama de classes é uma representação da estrutura e relações das classes que servem de modelo para objetos. Podemos afirmar de maneira mais simples que seria um conjunto de objetos com as mesmas características, assim saberemos identificar objetos e agrupá-los, de forma a encontrar suas respectivas classes. Na Unified Modeling Language (UML) em diagrama de classe, uma classe é representada por um retângulo com três divisões, são elas: O nome da classe, seus atributos e por fim os métodos.

# data[].attributes.body
1. UML: estrutura e objetivo de cada diagrama

2. Classe e Objeto

3. Atributos

4. Métodos (Troca de mensagens)

5. Relacionamentos (associação, generalização/especialização (Herança), agregação, classe de associação)

6. Encapsulamento, Herança e Polimorfismo

7. Diagrama de Classes