No Capítulo 3 dissemos que um tipo de dados é definido por:
Quando pensamos no tipo int
, por exemplo, e no que podemos fazer com valores desse tipo, estamos na verdade a abstrair uma série de pormenores de implementação como, por exemplo, a forma como esses valores são guardados em memória, a forma como são feitas as operações sobre esses valores, etc.
Relembre que os tipos de dados int
, double
e boolean
que usámos até agora são o que se chama de tipos de dados primitivos no Java porque estão incluídos na própria linguagem.
Podemos pensar em tipos de dados mais complexos, não só em termos dos valores que representam, mas também em termos das operações que podemos usar sobre esses valores.
Por exemplo, podemos pensar no conceito de aluno como um tipo de dados a que poderíamos chamar Aluno
. Para isso, deveríamos definir:
Aluno
: seria o conjunto de todos os alunos que pudessem existir (pessoas definidas, por exemplo, por um número, um nome e as notas obtidas nas disciplinas já finalizadas);Aluno
: poderia incluir, por exemplo, operações que permitissem conhecer a nota obtida pelo aluno a uma dada disciplina, conhecer o nome ou o número do aluno, registar uma dada nota numa nova disciplina, calcular a média do aluno, etc.O tipo de dados Aluno
seria um tipo de dados não primitivo, pois não está definido de base na linguagem Java. Ele seria definido através de uma classe de nome Aluno
, onde se descreveria o conjunto de valores e de operações que se poderiam realizar sobre esses valores.
Quando, num programa, precisássemos de trabalhar com informações sobre alunos, poderíamos, por exemplo, criar uma variável do tipo Aluno
, definir o seu valor ou estado (qual o seu nome, o seu número e as notas obtidas). Poderíamos de seguida aplicar sobre esse aluno todas as operações definidas no tipo de dados Aluno
. Seríamos aquilo a que se chama clientes do tipo de dados Aluno
porque o nosso código Java usaria esse tipo de dados.
A ideia é que os clientes de um dado tipo de dados usam-no sem precisarem de conhecer os pormenores de implementação desse tipo de dados, ou seja, abstraindo esses pormenores.
Por isso usamos a expressão abstração de dados para nos referirmos à separação entre
Um tipo de dados não primitivo
Prosseguindo a metáfora do “cliente”, podemos dizer que os objetos são fornecedores e as suas operações são os serviços que eles fornecem aos seus clientes.
Anterior: 7. Abstração de dados
Seguinte: 7.2. Revisitando o tipo String