classes e objetos
TRANSCRIPT
Tecnologia em Sistemas para Internet - IFMS
Aula 03 – Classes e Objetos
Estruturas de DadosProf.º Msc. Sidney Roberto de Sousa
Tec. em Sistemas para Internet - IFMS 2
O que veremos nesta aula?
● Classes● Uso de classes para encapsular tipos
complexos● Objetos● Matrizes de classes
Tec. em Sistemas para Internet - IFMS 3
Problema
● Imagine que temos que criar um sistema para cadastrar alunos de um colégio
● Primeiramente, devemos levantar quais são os dados de cada aluno a serem cadastrados
● Uma vez que estes dados sejam levantados, devemos modelá-los
Tec. em Sistemas para Internet - IFMS 4
Dados do aluno
Aluno:
Matrícula: Número
Nome Completo: Texto
Sexo: Caractere
CPF: Número
Data de Nascimento: Data
Telefone: Número
Tec. em Sistemas para Internet - IFMS 5
Dados do aluno
Aluno:
Matrícula: Número
Nome Completo: Texto
Sexo: Caractere
CPF: Número
Data de Nascimento: Data
Telefone: Número
Preciso armazenar como numérico?
Tec. em Sistemas para Internet - IFMS 6
Dados do aluno
Aluno:
Matrícula: Texto
Nome Completo: Texto
Sexo: Caractere
CPF: Texto
Data de Nascimento: Data
Telefone: Texto
Tec. em Sistemas para Internet - IFMS 7
Lendo dados de um aluno
String matricula = “”;
String nomeCompleto = “”;
char sexo = '';
String cpf = “”;
Date dataNascimento = null;
String telefone = “”;
// Deve agora realizar a leitura dos dados do aluno...
Tec. em Sistemas para Internet - IFMS 8
Problema
● Eu tenho que “guardar” todas as variáveis contendo os dados do aluno cadastrado → 6 variáveis
● Se eu tiver 10 alunos, tenho que criar 60 variáveis...
● Solução: poderia utilizar matrizes!
Tec. em Sistemas para Internet - IFMS 9
Lendo dados de um aluno
String[] matriculas = new String[10];
String[] nomesCompletos = new String[10];
char[] sexos = new char[10];
String[] cpfs = new String[10];
Date[] datasNascimento = new Date[10];
String[] telefones = new String[10];
// Deve agora realizar a leitura dos dados dos alunos...
Tec. em Sistemas para Internet - IFMS 10
Problema
● Agora ao invés de 60 variáveis, eu tenho apenas 6, mas...
● … será que esta é a melhor solução?– Para trabalhar com os dados dos alunos, o meu programa
necessitará guardar 6 matrizes
– Falta de centralização dos dados → maior complexidade de desenvolvimento
● Solução: precisamos de um tipo de dados complexo para encapsular os dados de cada aluno
Tec. em Sistemas para Internet - IFMS 11
Tipo de dados complexo
● Encapsula um ou mais campos de dados de acordo com um modelo específico
● No nosso exemplo, o modelo se refere a um aluno
● Em Java, tipos complexos são modelados como classes
Tec. em Sistemas para Internet - IFMS 12
Classe Aluno (abaixo no blog)
Tec. em Sistemas para Internet - IFMS 13
Métodos e atributos
● Uma classe Java é composta basicamente por atributos e métodos
● Um atributo é uma propriedade da classe● Um método é um bloco de código que tem
como finalidade executar alguma tarefa → usando ou não os atributos da classe
Tec. em Sistemas para Internet - IFMS 14
Métodos e atributos
● Atributos e métodos podem ter acesso privado, protegido ou público– Se privado, não é visível por outras classes
– Se protegido, é visível por classes do mesmo pacote ou subclasses (veremos isto futuramente...)
– Se público, é visível por qualquer outra classe
● Todo atributo e método é visível por qualquer outro atributo/método dentro da própria classe
● Atributos costumam ser definidos com acesso privado → proteção e encapsulamento dos atributos da classe
● O nível de acesso de um método depende de para quem queremos disponibilizá-lo
Tec. em Sistemas para Internet - IFMS 15
Getters e Setters
● Como dito anteriormente, atributos de classes costumam ser definidos como privados
● Assim, o acesso aos valores dos atributos é feito por meio de métodos
● Um método que retorna o valor de um atributo da classe é popularmente chamado de getter
● Um método que modifica o valor de um atributo da classe é popularmente chamado de setter
Tec. em Sistemas para Internet - IFMS 16
Analisando a classe Aluno
private String matricula;
// Método getter para o atributo matricula
public String getMatricula() {
return matricula;
}
// Método setter para o atributo matrícula
public void setMatricula(String matricula) {
this.matricula = matricula;
}
Tec. em Sistemas para Internet - IFMS 17
Analisando a classe Aluno
private String matricula;
// Método getter para o atributo matricula
public String getMatricula() {
return matricula;
}
// Método setter para o atributo matrícula
public void setMatricula(String matricula) {
this.matricula = matricula;
}
Retorna um valor do tipo String
Não retorna nenhum valor; por isto o tipo de
retorno é void
Tec. em Sistemas para Internet - IFMS 18
Analisando a classe Aluno
private String matricula;
// Método getter para o atributo matricula
public String getMatricula() {
return matricula;
}
// Método setter para o atributo matrícula
public void setMatricula(String matricula) {
this.matricula = matricula;
}
Note que o nome do atributo matricula conflita com o nome do parâmetro matricula do método setMatricula.
A palavra reservada this assegura que a variável sendo utilizada é o atributo matricula pertencente à classe Aluno.
Tec. em Sistemas para Internet - IFMS 19
Lendo dados de um aluno com a classe Aluno
Classe LeituraAluno
(abaixo no blog)
Tec. em Sistemas para Internet - IFMS 21
Analisando a classe LeituraAluno
● Na classe LeituraAluno não precisamos importar explicitamente a classe Aluno, pois as duas classes estão no mesmo pacote
● Desta forma, a classe LeituraAluno consegue enxergar todos os atributos/métodos da classe Aluno que sejam protegidos ou públicos
aluno.setMatricula(textoDigitado)
aluno.getNomeCompleto()
● Note que o acesso aos atributos ou métodos da classe Aluno por meio do objeto aluno se dá utilizando o operador ponto (.)
Tec. em Sistemas para Internet - IFMS 22
Analisando a classe LeituraAluno
● Notou a forma “peculiar” que o programa lê a data de nascimento do aluno?
● … falaremos disso mais tarde! :D
Tec. em Sistemas para Internet - IFMS 23
Lendo dados de vários alunos
● Para armazenar os dados de vários alunos lidos do usuário, podemos utilizar uma matriz
● Para tanto, basta instanciar uma matriz de objetos da classe Aluno
Tec. em Sistemas para Internet - IFMS 24
Lendo dados de vários alunos com a classe Aluno
Classe LeituraVariosAlunos
Tec. em Sistemas para Internet - IFMS 25
Analisando a classe LeituraVariosAlunos
● A instanciação de matrizes de tipos complexos se dá em dois passos
● Primeiramente, devemos instanciar a matriz informando o número de elementos que ela terá
Aluno[] alunos = new Aluno[10];
● Por fim, devemos instanciar cada elemento da matriz individualmente antes de utilizá-lo
alunos[i] = new Aluno();
● Cada elemento da matriz é tratado como um objeto comumalunos[i].setCpf(textoDigitado);
Tec. em Sistemas para Internet - IFMS 26
Referências
HORSTMANN, C. S.; CORNELL, G. Core Java. Oitava edição. Pearson Prentice Hall. São Paulo, 2010.