Tecnologia em Sistemas para Internet - IFMS




Aula 03 – Classes e Objetos


        Estruturas de Dados
   Prof.º Msc. Sidney Roberto de Sousa
O que veremos nesta aula?

●   Classes
●   Uso de classes para encapsular tipos
    complexos
●   Objetos
●   Matrizes de classes




                  Tec. em Sistemas para Internet - IFMS   2
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   3
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   4
Dados do aluno

Aluno:
  Matrícula: Número
  Nome Completo: Texto               Preciso armazenar
  Sexo: Caractere                    como numérico?
  CPF: Número
  Data de Nascimento: Data
  Telefone: Número

                Tec. em Sistemas para Internet - IFMS   5
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   6
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   7
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   8
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   9
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    10
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   11
Classe Aluno (abaixo no blog)




        Tec. em Sistemas para Internet - IFMS   12
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   13
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        14
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   15
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   16
Analisando a classe Aluno
private String matricula;


// Método getter para o atributo matricula
public String getMatricula() {             Retorna um valor do
    return matricula;                           tipo String
}


// Método setter para o atributo matrícula
                                         Não retorna nenhum
public void setMatricula(String matricula) {
    this.matricula = matricula;         valor; por isto o tipo de
}                                           retorno é void

                        Tec. em Sistemas para Internet - IFMS       17
Analisando a classe Aluno
private String matricula;
                                                                Note que o nome do
                                                                atributo matricula
// Método getter para o atributo matricula
                                                                conflita com o nome
public String getMatricula() {                                  do parâmetro
    return matricula;
                                                                matricula do método
                                                                setMatricula.
}
                                                                A palavra reservada
                                                                this assegura que a
// Método setter para o atributo matrícula                      variável sendo
public void setMatricula(String matricula) {                    utilizada é o atributo
                                                                matricula
    this.matricula = matricula;                                 pertencente à classe
}                                                               Aluno.


                        Tec. em Sistemas para Internet - IFMS                        18
Lendo dados de um aluno com a classe Aluno




          Classe LeituraAluno
            (abaixo no blog)




              Tec. em Sistemas para Internet - IFMS   19
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    21
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   22
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   23
Lendo dados de vários alunos com a classe Aluno




         Classe LeituraVariosAlunos




                Tec. em Sistemas para Internet - IFMS   24
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 comum
      alunos[i].setCpf(textoDigitado);




                        Tec. em Sistemas para Internet - IFMS     25
Referências
HORSTMANN, C. S.; CORNELL, G. Core Java. Oitava edição. Pearson
Prentice Hall. São Paulo, 2010.




                        Tec. em Sistemas para Internet - IFMS     26

Classes e Objetos

  • 1.
    Tecnologia em Sistemaspara Internet - IFMS Aula 03 – Classes e Objetos Estruturas de Dados Prof.º Msc. Sidney Roberto de Sousa
  • 2.
    O que veremosnesta aula? ● Classes ● Uso de classes para encapsular tipos complexos ● Objetos ● Matrizes de classes Tec. em Sistemas para Internet - IFMS 2
  • 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 3
  • 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 4
  • 5.
    Dados do aluno Aluno: Matrícula: Número Nome Completo: Texto Preciso armazenar Sexo: Caractere como numérico? CPF: Número Data de Nascimento: Data Telefone: Número Tec. em Sistemas para Internet - IFMS 5
  • 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 6
  • 7.
    Lendo dados deum 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 7
  • 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 8
  • 9.
    Lendo dados deum 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 9
  • 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 10
  • 11.
    Tipo de dadoscomplexo ● 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 11
  • 12.
    Classe Aluno (abaixono blog) Tec. em Sistemas para Internet - IFMS 12
  • 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 13
  • 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 14
  • 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 15
  • 16.
    Analisando a classeAluno 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 16
  • 17.
    Analisando a classeAluno private String matricula; // Método getter para o atributo matricula public String getMatricula() { Retorna um valor do     return matricula; tipo String } // Método setter para o atributo matrícula Não retorna nenhum public void setMatricula(String matricula) {     this.matricula = matricula; valor; por isto o tipo de } retorno é void Tec. em Sistemas para Internet - IFMS 17
  • 18.
    Analisando a classeAluno private String matricula; Note que o nome do atributo matricula // Método getter para o atributo matricula conflita com o nome public String getMatricula() { do parâmetro     return matricula; matricula do método setMatricula. } A palavra reservada this assegura que a // Método setter para o atributo matrícula variável sendo public void setMatricula(String matricula) { utilizada é o atributo matricula     this.matricula = matricula; pertencente à classe } Aluno. Tec. em Sistemas para Internet - IFMS 18
  • 19.
    Lendo dados deum aluno com a classe Aluno Classe LeituraAluno (abaixo no blog) Tec. em Sistemas para Internet - IFMS 19
  • 20.
    Analisando a classeLeituraAluno ● 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 21
  • 21.
    Analisando a classeLeituraAluno ● 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 22
  • 22.
    Lendo dados devá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 23
  • 23.
    Lendo dados devários alunos com a classe Aluno Classe LeituraVariosAlunos Tec. em Sistemas para Internet - IFMS 24
  • 24.
    Analisando a classeLeituraVariosAlunos ● 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 comum alunos[i].setCpf(textoDigitado); Tec. em Sistemas para Internet - IFMS 25
  • 25.
    Referências HORSTMANN, C. S.;CORNELL, G. Core Java. Oitava edição. Pearson Prentice Hall. São Paulo, 2010. Tec. em Sistemas para Internet - IFMS 26