Objetivo de Aprendizagem 3.1.A: Representar o projeto de um programa usando linguagem natural ou criando diagramas que indiquem as classes no programa e as abstrações de dados e procedurais encontradas em cada classe, incluindo todos os atributos e comportamentos.
- 3.1.A.1 Abstração é o processo de reduzir a complexidade focando na ideia principal. Ao ocultar detalhes irrelevantes para a questão em mãos e agrupar detalhes relacionados e úteis, a abstração reduz a complexidade e permite que um se foque na ideia.
- 3.1.A.2 Abstração de dados fornece uma separação entre as propriedades abstratas de um tipo de dado e os detalhes concretos de sua representação. A abstração de dados gerencia a complexidade dando um nome aos dados sem referenciar os detalhes específicos da representação. Os dados podem assumir a forma de uma única variável ou uma coleção de dados, como em uma classe ou conjunto de dados.
- 3.1.A.3 Um atributo é um tipo de abstração de dados definido em uma classe fora de qualquer método ou construtor. Uma variável de instância é um atributo cujo valor é único para cada instância da classe. Uma variável de classe é um atributo compartilhado por todas as instâncias da classe.
- 3.1.A.4 Abstração procedural fornece um nome para um processo e permite que um método seja usado sabendo apenas o que ele faz, não como ele faz. Através da decomposição de métodos, um programador divide grandes comportamentos da classe em menores comportamentos criando métodos para representar cada pequeno comportamento individual. Uma abstração procedural pode extrair recursos compartilhados para generalizar funcionalidade em vez de duplicar código. Isso permite a reutilização de código, o que ajuda a gerenciar a complexidade.
- 3.1.A.5 Usar parâmetros permite que procedimentos sejam generalizados, permitindo que os procedimentos sejam reutilizados com uma gama de valores de entrada ou argumentos.
- 3.1.A.6 Usar abstração procedural em um programa permite que programadores alterem os internos de um método (para torná-lo mais rápido, mais eficiente, usar menos armazenamento, etc.) sem precisar notificar os usuários do método sobre a mudança, desde que a assinatura do método e o que o método faz seja preservado.
- 3.1.A.7 Antes de implementar uma classe, é útil dedicar tempo para projetar cada classe, incluindo seus atributos e comportamentos. Esse projeto pode ser representado usando linguagem natural ou diagramas.

