Prévia do material em texto
Programação
Orientada a Objetos
Programação
Orientada a Objetos
1ª edição
2018
Autoria
Parecerista Validador
Samira Santos da Silva
Natália Gonçalves Machado
Adriano Donizete Pila
*Todos os gráficos, tabelas e esquemas são creditados à autoria, salvo quando indicada a referência.
Informamos que é de inteira responsabilidade da autoria a emissão de conceitos. Nenhuma parte
desta publicação poderá ser reproduzida por qualquer meio ou forma sem autorização. A violação dos
direitos autorais é crime estabelecido pela Lei n.º 9.610/98 e punido pelo artigo 184 do Código Penal.
8
1Unidade 1
1. Classes e Objetos
Para iniciar seus estudos
Nesta unidade, você compreenderá os conceitos mais básicos de orien-
tação a objetos: os objetos e as classes. Além disso, você aprenderá como
representá-los em um dos diagramas mais utilizados nos dias de hoje – o
diagrama de classes UML – a fim de gerar uma modelagem que possa dar
uma noção de como realizar a implementação. Por fim, você dominará a
implementação de um código utilizando a linguagem Java, uma lingua-
gem moderna e de fácil compreensão. Vamos lá?
Objetivos de Aprendizagem
• Contextualizar o paradigma de programação orientado a objetos,
dominando os conceitos mais básicos associados, as formas de
representação em diagrama de classes UML e sua implementação
na linguagem Java.
9
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Introdução da unidade
No contexto de programação orientada a objetos estão os conceitos de objetos e classes. Sua compreensão é
de extrema importância para o aprofundamento e domínio de linguagens de programação orientadas a objetos.
Nesta unidade, elucidamos esses conceitos e seus conteúdos relacionados, fazendo associações com objetos do
dia a dia. Além disso, apresentaremos as diferenças entre a programação estruturada convencional e a progra-
mação orientada a objetos, permitindo ao aluno optar por cada uma das abordagens, dependendo da aplicação.
Por fim, mostraremos como o resultado da análise e projeto de um software pode ser representado por meio de
diagramas de classes UML, uma das formas de modelagem mais utilizadas nos dias atuais. Após apresentarmos
essa modelagem, introduziremos a codificação em Java, uma linguagem moderna, porém, bem definida e que
possui diversas facilidades, associadas principalmente à produtividade e reuso de código.
1.1 Classes e objetos
Nesta unidade, apresentaremos alguns conceitos de orientação a objetos que são necessários para o pleno
entendimento deste paradigma de programação. Em seguida, a representação UML é utilizada para consolidar
os conceitos definidos. Por fim, mostramos na prática como os conceitos de orientação a objetos se aplicam na
programação em linguagem Java.
1.1.1 Conceitos de orientação a objetos
Nesta seção, serão apresentados os principais conceitos necessários para a iniciação dos estudos em orientação
a objetos. Primeiramente, vamos abordar as principais diferenças entre as técnicas de programação estruturada
e programação orientada a objetos. A seguir, aclaramos as definições de classes e objetos, que são a essência
para a compreensão de orientação a objetos. Em seguida, apresentaremos a definição de atributos e métodos
de classes. Por fim, os conceitos da unidade serão consolidados por meio da representação UML e codificação
em Java.
1.1.2 Programação estruturada versus programação orientada a objetos
Programação estruturada e programação orientada a objetos são o que chamamos de paradigmas. Paradigmas
são modelos ou padrões que foram adotados após anos de experiência. Na programação estruturada, o foco
principal da programação está nas ações. Ações em programação são implementadas por meio de procedimen-
tos e funções; além disso, há um maior controle em relação ao fluxo de execução de programas por meio de
estruturas de sequência, estruturas de decisão e estruturas de repetição.
Devido à facilidade ao entendimento, as linguagens estruturadas são utilizadas geralmente em cursos intro-
dutórios de programação. Seu foco está principalmente em como as tarefas devem ser feitas ao invés de o que
deve ser feito. Nesse paradigma, não há uma separação clara entre o tratamento de dados e o comportamento
do programa. Sua aplicação é frequentemente dada em aplicações mais simples e mais diretas.
10
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
A programação orientada a objetos surgiu entre as décadas de 1960 e 1970 com o objetivo de modelar proble-
mas mais complexos. A linguagem Simula 67, por exemplo, foi introduzida nesse período e já apresentava alguns
dos conceitos de linguagens orientadas a objetos. Em 1970, surgia a linguagem Smalltalk, a primeira linguagem
totalmente orientada a objetos. A linguagem C++, uma versão da linguagem C, porém orientada a objetos, se
deu no início da década de 80 e é utilizada amplamente até os dias atuais. Mais tarde, no ano de 1991, a Sun
Microsystems deu início ao desenvolvimento da linguagem Java, que também se utiliza do paradigma de orien-
tação a objetos e se faz presente no desenvolvimento dos softwares mais modernos.
A programação orientada a objetos não visa substituir a programação estruturada tradicional, mas, sim, evoluir
as diversas práticas adotadas por ela. Ambos os paradigmas abordam o mesmo problema de formas diferentes.
Enquanto o paradigma estruturado foca nas ações, representado por funções e procedimentos, o paradigma
orientado a objetos foca nos objetos e seus relacionamentos. Outros conceitos introduzidos nesse paradigma
são os conceitos de encapsulamento, classe, herança e polimorfismo.
Existem diversas vantagens na utilização de linguagens de programação orientadas a objetos no desenvolvi-
mento de softwares. Suas práticas resultam em baixa complexidade do código para problemas complexos, o
que facilita o processo de manutenção enquanto provê um aumento na produtividade. Com a possibilidade de
criação de bibliotecas de classes, permite-se o compartilhamento e, até mesmo, reuso do código nesse tipo de
linguagem.
1.1.3 Definindo classes e objetos
Os conceitos de classes e, principalmente, objetos são a chave para entender o paradigma de orientação a obje-
tos. Além disso, a explicação de um está inteiramente ligada à explicação do outro. Objetos podem ser compara-
dos a objetos do mundo real, como, por exemplo, mochila, mesa, computador, cadeira etc. Entretanto, os objetos
no mundo real possuem duas características básicas: seu estado (atributo) e seu comportamento. A figura abaixo
ilustra um exemplo do objeto “cachorro”.
Figura 1 – Imagem do objeto cachorro
Fonte: SHUTTERSTOCK, 2018.
11
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
O objeto “cachorro” pode possuir, por exemplo, os seguintes atributos: nome, cor e raça. No caso da figura
apresentada, o nome poderia ser “Rex”, sua cor poderia ser “marrom” e sua raça “Golden Retriever”, ou seja,
esses seriam os valores dos atributos específicos do cachorro da Figura 1. Os possíveis comportamentos de um
cachorro poderiam ser: “latir”, “dormir”, “comer”, “abanar o rabo”, etc. Os comportamentos são hábitos comuns
a todos os cachorros.
Outro exemplo de objeto seria a “bicicleta” ilustrada na Figura 2, que pode ter, por exemplo, os seguintes atribu-
tos: cor, preço, marca e quantidade de marchas. Neste caso, o valor do atributo cor poderia ser “amarelo”; o preço,
“200 reais”; a marca, “BikeNew”; e a quantidade de marchas, “21”. Alguns dos comportamentos de uma bicicleta
poderiam ser: “mudar a marcha”, “frear”, “acender a lanterna”, etc.
Figura 2 – Imagem de uma bicicleta
Fonte: SHUTTERSTOCK, 2018.
Se considerarmos os exemplos dados acima, podemos concluir que objetos são instâncias específicas de deter-
minada classe, ou seja, determinando os valores dos atributos para a classe “Cachorro”, construímos a descrição
de um objeto que pertence a essa classe. Assim, classe pode ser definida como um agrupamentode objetos que
possuem atributos e comportamentos semelhantes. Na Figura 3, definida abaixo, podemos verificar quatro tipos
de bicicleta, e todas pertencem à classe “Bicicleta”. Entretanto, como cada uma possui valores diferentes para os
atributos da classe “Bicicleta”, podemos dizer que cada uma delas é uma instância ou um objeto dessa classe.
12
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Figura 3 – Quatro objetos que pertencem à classe “Bicicleta”
Fonte: SHUTTERSTOCK, 2018.
1.1.4 Atributos e métodos
Objetos em softwares são abstrações do mundo real. Sendo assim, possuem atributos que revelam seu estado,
bem como métodos que descrevem seu comportamento. Fazendo uma comparação com o paradigma de pro-
gramação estruturada, os atributos correspondem às variáveis, e métodos correspondem às funções. Para definir
os atributos da classe “Bicicleta”, por exemplo, precisamos pensar quais são as características comuns a todas as
bicicletas, como cor, marca, quantidade de marchas, etc. Os atributos, além de possuírem um nome – exemplos:
cor, marca, etc. –, também devem possuir um tipo. Esse tipo pode ser algum já predefinido pela própria lingua-
gem, ou seja, nativo à linguagem, ou pode ser um tipo definido pelo programador. O tipo do atributo nomeado
“quantidade de marchas” pode ser, por exemplo, inteiro, representado pela palavra reservada “int”.
Em relação aos métodos, é necessário o questionamento sobre quais comportamentos são apresentados por
todos os objetos da classe “Bicicleta”. Por exemplo, “frear” é um comportamento comum a todas as bicicletas,
independentemente de cor, marca ou quantidade de marchas. Por isso, na classe “Bicicleta” deve existir o método
“frear”. Assim como as funções no paradigma estruturado, métodos também podem receber argumentos de
diversos tipos, que são declarados na sua assinatura. Um método também pode possuir um valor de retorno, que
pode ser tanto valores escalares quanto instâncias de classes (objetos). Métodos podem não retornar nenhum
valor ou retornar um único valor, mas não podem retornar múltiplos valores.
13
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
A visibilidade de um membro de uma classe, seja ele um atributo ou um método, pode ser definida de três for-
mas. Membros que são públicos podem ser acessados por todas as classes. Membros que são privados podem
ser acessados somente pela própria classe a qual pertencem, ou seja, uma classe externa não pode fazer referên-
cia a esses membros. Membros que são protegidos podem ser acessados pela classe a qual pertencem, por suas
subclasses e também por outras classes que pertencem ao mesmo pacote de classes.
Classes possuem métodos especiais denominados construtores. Esses métodos são utilizados na instanciação
de um objeto de determinada classe. Se alguém deseja criar um objeto de determinada classe, é necessária a
chamada ao método construtor dessa classe. O método construtor de uma classe, quando definido, possui o
mesmo nome que a classe. Quando não definimos um método construtor para uma classe, um método constru-
tor default é criado automaticamente, de forma a inicializar os atributos com valores nulos.
1.2 Representação UML
Em orientação a objetos, são necessários alguns passos que antecedem o início da codificação de fato, prin-
cipalmente em softwares mais complexos, nos quais o número de pessoas envolvidas geralmente é grande. O
primeiro passo seria a análise ou levantamento dos requisitos do software a ser desenvolvido. Nesta etapa, é
determinado o que será feito. O segundo passo consiste em projetar uma solução satisfatória, ou seja, deter-
minar como será feita a implementação do software. Quando essas etapas são realizadas utilizando um ponto de
vista orientado a objetos, chamamos de análise e projeto orientados a objetos.
Essas etapas iniciais, se realizadas de forma bem feita, podem poupar muito esforço e dinheiro nas fases poste-
riores, visto que erros encontrados no princípio do projeto são mais fáceis de corrigir do que se encontrados na
etapa de codificação, por exemplo. Assim, pessoas envolvidas no desenvolvimento de um sistema devem estabe-
lecer um meio de comunicar o modo como eles resolveram determinado problema. Um exemplo de linguagem
gráfica frequentemente utilizada para esse propósito de modelar o resultado do processo de análise de projeto
orientado a objetos é a unified modeling language (UML).
Tendo seu início dado em 1994, desde 1997 a UML tem sido adotada como padrão internacional utilizado para
representar graficamente a modelagem de softwares orientados a objetos. Essa linguagem consiste em padrões
de notações gráficas que acabam gerando uma representação em forma de diagramas. Na versão 2.0 da UML,
existem 13 tipos diferentes de diagramas, que podem ser de dois tipos: diagramas estruturais e diagramas
comportamentais. Nos diagramas estruturais, é possível descrever a estrutura estática do sistema como um
todo, ou seja, como as classes se organizam, seus relacionamentos, etc. Os diagramas comportamentais descre-
vem os aspectos dinâmicos de um sistema, muitas vezes importantes e difíceis de serem capturados, utilizando
um diagrama comportamental, como as partes do sistema que passam por alterações conforme a interação do
usuário vai acontecendo.
Neste material, vamos manter o interesse em uma instância dos diagramas estruturais específica: os diagramas
de classe. Pode-se dizer que esse tipo de diagrama é o mais utilizado e um dos mais importantes dentre os dia-
gramas da UML. Por meio desse diagrama, é possível definir a estrutura do sistema, em termos de suas classes,
os atributos e métodos que ela possui, e como as classes se relacionam e trocam mensagens entre si. Nesse dia-
grama, uma classe é a representação mais básica, sendo definida por um ícone contendo um retângulo dividido
em três compartimentos verticais: o primeiro compartimento (de cima para baixo) consiste no nome da classe;
o segundo consiste nos atributos que esta classe possui; o último compartimento apresenta a declaração dos
métodos que essa classe possui.
14
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Figura 4 – Representação da classe “Lampada” no diagrama de classes UML
Lampada
- estadoDaLampada: boolean
- acende ( )
- apaga ( )
- retornaEstado( ): boolean
Fonte: Elaborada pelo autor.
A Figura 4 ilustra a representação da classe “Lampada” no diagrama de classes UML. Nela, podemos identificar
que a classe “Lampada” possui somente um atributo, o “estadoDaLampada”. Além disso, essa classe apresenta
três métodos: “acende( )”, “apaga( )” e “retornaEstado( )”.
Em alguns diagramas, os dois últimos compartimentos são omitidos. Em outros casos,
somente os atributos ou métodos mais importantes para a finalidade são apresentados.
Fique atento!
Para representar a visibilidade de um membro de uma classe em diagramas UML, utilizamos os seguintes símbo-
los: “+” para visibilidade pública, “-” para visibilidade privada e “#” para visibilidade protegida. No exemplo da
Figura 4, podemos notar, por meio do símbolo “-” posicionado antes do nome de cada membro, que todos são
privados.
Cada atributo possui um tipo, que é representado por “:” após seu nome, seguido da palavra que representa o
tipo. Na classe “Lampada”, o atributo “estadoDaLampada” é definido como booleano (ou seja, pode possuir valor
true ou false). Caso o método receba argumentos, seus tipos são definidos da mesma forma, e os argumentos
são separados por vírgulas dentro dos parênteses em “nomedoMetodo( )”, por exemplo. Além disso, os argumen-
tos de um método podem ser definidos somente por seus tipos, sem mencionar seus nomes. Se a função tem
retorno, podemos colocar na frente da sua declaração o símbolo “:”, seguido do tipo do retorno, como mostrado
no método “retornaEstado( ): boolean”, que retorna um booleano. Se um método não retorna nada, pode ser
indicado colocando “:void” após sua declaração ousimplesmente omitindo seu tipo de retorno.
Por fim, além de descrever classes, diagramas de classe UML também podem ilustrar o relacionamento entre elas.
1.3 Codificação em Java
Apesar de o paradigma de orientação a objetos ser utilizado em diversas linguagens, nesta apostila conduzire-
mos o leitor à prática de programação orientada a objetos utilizando a linguagem Java. Nesta seção, os conceitos
mais básicos de Java serão previamente definidos a fim de consolidar uma base para a aplicação dos conceitos de
orientação a objetos, que será apresentada em sequência.
15
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
1.3.1 Primeiro programa em Java
A criação de um primeiro programa simples em Java para impressão de uma mensagem na tela é ilustrada na
Figura 5. Em Java, sempre temos uma classe principal, que deve conter o método main, cuja assinatura é invariá-
vel. Esta é a classe na qual a execução do programa se inicia, sendo, portanto, uma classe que não é instanciada.
Determinamos sua visibilidade como pública por meio do termo “public class” precedendo seu nome e definimos
seus métodos entre colchetes. O main é precedido pelas palavras reservadas “public static void”, que significam
que o método é público (pode ser chamado fora da classe) e estático (static), ou seja, permite-se que o método
seja chamado sem a criação de uma instância da classe e não tem valor de retorno (void).
Argumentos podem ser passados por meio da linha de comando durante a chamada do interpretador e são rece-
bidos por um vetor de Strings, classe definida em Java para representar cadeias de caracteres, denominadas args.
O comando System.out é conhecido como objeto de saída padrão. E o método println( ) dentro desse objeto faz a
impressão do seu argumento, colocando ao final uma quebra de linha.
Figura 5 – Exemplo de um primeiro programa em Java
public class MeuPrimeiroProg{
public static void main ( String args [ ] ) {
System.out.println ( “Seja bem-vindo ao Java”);
}
}
Fonte: Elaborada pelo autor.
1.3.2 Tipos de dados e variáveis
A linguagem Java, em especial, oferece dois tipos de dados com os quais podemos trabalhar: tipos primitivos e
tipos de referência. Tipos primitivos correspondem a dados simples ou escalares e são detalhados no Quadro 1.
Tipos de referência consistem em arrays, classes e interfaces, e serão definidos posteriormente.
Quadro 1 – Tipos primitivos na linguagem Java
Tipo Descrição
boolean Assume o valor true or false.
char Caractere em notação unicode de 16 bits. Serve para
armazenar dados alfanuméricos.
byte Inteiro de 8 bits em notação de complemento de dois.
short Inteiro de 16 bits com notação em complemento de dois.
int Inteiro de 32 bits em notação de complemento de dois.
16
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Tipo Descrição
long Inteiro de 64 bits em notação de complemento de dois.
float Números em notação de ponto flutuante normalizada na
precisão simples de 32 bits.
double Números em notação de ponto flutuante normalizada na
precisão dupla de 64 bits.
Fonte: Elaborado pelo autor.
Os tipos do Quadro 1 descrevem não somente variáveis e atributos, mas também tipos de argumentos de méto-
dos e tipos de retorno de funções. A definição de uma variável ou de um atributo pode se dar da seguinte forma:
;
Ou com atribuição de valor:
= ;
Na declaração de um método, especificamos os tipos dos argumentos e o tipo do retorno da seguinte forma:
nomeMetodo ( , )
Além disso, em Java existem três especificadores de acesso aos membros de uma classe: public para membros
públicos, private para membros privados e protected para membros protegidos. Utilizando a sintaxe anterior, a
declaração de um método usando especificadores seria feita da seguinte forma:
nomeMetodo ( , )
1.3.3 Importando classes
A instrução import em Java é utilizada dentro de uma classe para carregar classes externas para serem referencia-
das. No Java, existe um conjunto de classes já definidas e que podem ser úteis no desenvolvimento de programas.
Essas classes são agrupadas em pacotes. Podemos importar uma classe específica definindo, por exemplo, o seu
caminho completo:
import java.util.Scanner
Nesse caminho, a classe Scanner, que pertence ao pacote java.util do Java, seria importada. Também é possível
importar todas as classes contidas em um pacote por meio do uso do asterisco:
import java.util.*
1.3.4 Lendo dados da entrada
Em muitos programas, faz-se necessária a entrada de dados pelo usuário durante sua execução. Em Java, conse-
guimos isso por meio da importação e instanciação da classe java.util.Scanner. A Figura 6 ilustra a leitura de dois
dados inteiros do teclado, a realização da subtração entre eles e a impressão do resultado. Um objeto da classe
17
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Scanner permite que o programa faça a leitura de dados, que podem vir do teclado ou de um arquivo, por exem-
plo. Assim, na sua instanciação, devemos passar como argumento no seu construtor Scanner( ) de onde os dados
vêm. Nesse caso, como queremos especificar que os dados vêm do teclado, passamos como parâmetro o System.
in, que significa entrada-padrão. Assim, criamos o objeto “entrada”. Sempre que chamamos o método nextInt( )
do objeto “entrada”, fazemos a leitura do próximo inteiro da entrada.
Figura 6 – Exemplo de entrada do teclado na linguagem Java
import java.util.Scanner;
public class Subtracao{
public static void main(String args [ ]) {
Scanner estrada = new Scanner (System. in);w
int numero1, numero2, subtracao;
System.out.printf(“Informe o primeiro número\n”);
numero1 = entrada.next( ); //lê o primeiro número
System.out.printf(“Informe o segundo número\n”);
numero2 = entrada.nextInt( ); //lê o segundo número
subtracao = numero1-numero2;
System.out.printf (“A subtração é %d\n”, subtracao);
}
}
Fonte: Elaborada pelo autor.
Caso o dado a ser lido não seja um inteiro, outros métodos podem ser necessários. Outra forma de chamarmos o
construtor Scanner( ) para criar um objeto é colocar o nome do pacote onde a classe está situada:
Scanner entrada = new java.util.Scanner (System.in);
Assim, não seria necessária a importação da classe Scanner.
1.3.5 Vetores e matrizes
Os vetores em Java são definidos de forma muito semelhante a linguagens estruturadas convencionais. Podemos
criar vetores de inteiros das seguintes formas:
int c[ ];
c = new int [6];
Ou já definindo seus valores:
int vet[ ] = {1,5,10,4,9,11}
Ou sendo seu tamanho uma variável:
int tamanho = 6;
int[ ] c = new int [tamanho];
18
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Além de vetores, também se pode criar matrizes em Java. Matrizes podem ser definidas como vetores multidi-
mensionais e são declaradas de forma semelhante aos vetores:
int mat[ ] [ ] = { { 1,2,3},{4,5,6 } };
Ou de forma alternativa:
int b[ ] [ ] = new int [4][5];
Ou, até mesmo, uma matriz com quantidade de colunas diferentes para cada linha:
int c[ ][ ] = new int [2][ ]; //cria duas linhas
c[0] = new int[5]; //cria 5 colunas para a linha 0
c[1] = new int[3]; //cria 3 colunas para a linha 1
1.3.6 Definindo classes e objetos
As classes em Java são definidas por meio da palavra reservada class, precedida pelo especificador da classe e
seguida por seu nome. Dentro da classe, com seu escopo definido por colchetes, primeiro apresentamos os atri-
butos que pertencem a esta classe. Além do tipo, o especificador também deve ser definido para cada atributo.
Após definir todos os atributos, definimos os métodos quea classe possui. Por padrão, primeiro declaramos e
definimos o método Construtor da classe com nome idêntico ao da mesma. Esse método recebe como parâ-
metro os valores que devem ser atribuídos aos atributos no momento da instanciação, ou seja, no momento da
criação do objeto. O método construtor não tem valor de retorno.
No exemplo da Figura 7, fazemos referência aos atributos da classe “Conta” em seu construtor, utilizando a pala-
vra reservada this, seguida de um ponto e do nome do atributo. Assim, conseguimos distinguir entre os atributos
da classe e os parâmetros do método construtor que possuem os mesmos nomes. Caso o método construtor
não seja definido para uma classe, no ato da instanciação, nenhum parâmetro é passado como argumento, e o
construtor default da classe é chamado. Este construtor define o valor de cada atributo como sendo nulo.
Podemos definir mais de um construtor para uma classe alterando os argumentos que são
recebidos pelo método, o que define o conceito de sobrecarga. A escolha do construtor a ser
chamado será feita em tempo de execução, dependendo dos parâmetros passados.
Após a definição do construtor, definimos os métodos que a classe possui. Os métodos são
declarados conforme as funções em linguagens estruturadas, com a exceção de que deve-
mos determinar o especificador de cada método, incluindo o construtor. O especificador,
como mencionado anteriormente, vai dizer quem pode acessar aquele método.
Saiba mais
19
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Figura 7 – Codificação da classe “Conta” na linguagem Java
public class Conta {
private String titular;
private double saldo;
private int numero;
private int agencia;
public Conta(String titular. double saldo, int numero, int agencia ){
this.titular=titular;
this.saldo=saldo;
this.numero=numero;
this.agencia=agencia;
}
public void deposita(double quantidade){
saldo+=quantidade;
}
public void saca(double quantidade){
saldo+=quantidade;
}
public void saca( ){
system.out.printf(“Seu saldo é %f.”,saldo);
}
/* . . . Outros métodos . . . */}
}
Fonte: Elaborada pelo autor.
A Figura 7 define a classe “Conta”, que possui quatro atributos, sendo o titular uma String; o saldo, um double; e
o número e agência inteiros. O construtor dessa classe recebe valores para todos os seus atributos. Além disso,
a classe possui outros três métodos: um método para fazer o depósito de determinada quantidade (recebida
por parâmetro); outro método para fazer um saque de determinada quantidade (recebida por parâmetro); e um
último método sem valor de retorno ou argumento para verificar o saldo da conta.
Destrutores são métodos especiais de uma classe que liberam a memória ocupada por um
objeto. Isso impede que a memória se esgote, fazendo com que uma tarefa não possa ser
finalizada. Em Java, o método destrutor, definido como finalize( ), é chamado de forma auto-
mática, mas pode ser redefinido para uma classe.
Saiba mais
É importante notar que acionar o método destrutor finalize( ) não faz o objeto ser destruído
de imediato, mas o marca para destruição.
Fique atento!
20
Programação Orientada a Objetos | Unidade 1 - Classes e Objetos
Definir objetos, no contexto do Java, significa instanciar classes. No exemplo da Figura 8, instanciamos a classe
denominada “Conta” dentro da função main, criando um objeto chamado “minhaConta”. Nesse sentido, a sin-
taxe da instanciação consiste em determinar o tipo do objeto a ser criado seguido do seu nome, o sinal de atri-
buição “=”, seguido pela palavra reservada new e a chamada do construtor conforme definida no interior da
classe “Conta”. Caso o construtor da classe “Conta” não estivesse definido, poderíamos chamar seu construtor
utilizando Conta( ), ou seja, sem passar nada como parâmetro.
Figura 8 – Instanciação e utilização do objeto “minhaConta” da classe “Conta”
public class Banco{
public static void main ( String arg [ ] ){
Conta minhaconta = new Conta ( “Bob”, 300.50, 02345, 1234 );
minhaConta.deposita (100);
minhaConta.saca (50);
minhaConta.Saldo( );
}
}
Fonte: Elaborada pelo autor.
Após a instanciação do objeto, podemos fazer chamadas a seus métodos utilizando a seguinte sintaxe:
nomeObjeto.nomeMetodo(parametros);
No exemplo da Figura 8, fazemos um depósito de 100 reais; em seguida, um saque de 50 reais e, por fim, pedimos
para exibir o saldo na tela. Métodos podem ter parâmetros ou não, e podem retornar valores ou não. Nesse exem-
plo, temos exemplos de todas essas situações, com exceção de métodos que retornam valores.
Síntese da unidade
Nesta unidade, definimos os principais conceitos necessários para compreensão e utilização de classes e objetos.
Foram apresentadas as principais diferenças entre uma linguagem de programação estruturada convencional
e linguagens orientadas a objetos, bem como a definição de classes, objetos, atributos e métodos. Além disso,
possibilitamos ao aluno o entendimento de como representar os conceitos de orientação a objetos utilizando o
diagrama de classes UML.
Por fim, introduzimos a codificação na linguagem Java partindo de exemplos de códigos mais simples e abor-
dando impressões de caracteres na tela, definição de tipos de dados, importação de classes, leitura de dados do
teclado, definição de vetores e matrizes, até chegar à definição de classes, seus métodos e atributos e instancia-
ção de objetos.
21
Considerações finais
Os conceitos apresentados nesta unidade servem como base para a com-
preensão da programação orientada a objetos. Apesar de o aprofunda-
mento desses conceitos ainda não ter sido realizado, os conceitos até
então apresentados já permitem a codificação de softwares mais simples
na linguagem de programação Java, utilizando o paradigma de progra-
mação orientada a objetos.
Unidade 1
1. Classes e Objetos
Unidade 2
2. Aprofundamento em Classes e Objetos
Unidade 3
3. Herança e Polimorfismo
Unidade 4
4. Composição e Agregação
Unidade 5
5. Boas Práticas I
Unidade 6
6. Armazenamento de Dados
Unidade 7
7. Interface Gráfica
Unidade 8
8. Boas Práticas II