Escolar Documentos
Profissional Documentos
Cultura Documentos
Rafael Lucchesi
Diretor do Departamento Nacional do SENAI
Alcantaro Corra
Presidente da Federao da Indstria do Estado de Santa Catarina
Florianpolis/SC
2011
proibida a reproduo total ou parcial deste material por qualquer meio ou sistema sem o prvio consentimento
do editor.
Autor
Dieison Grumovski
Fotografias
Banco de Imagens SENAI/SC
http://www.sxc.hu/
http://office.microsoft.com/en-us/ images/
http://www.morguefile.com/
http://www.bancodemidia.cni.org.br/
Prefcio
Voc faz parte da maior instituio de educao profissional do estado.
Uma rede de Educao e Tecnologia, formada por 35 unidades conectadas e estrategicamente instaladas em todas as regies de Santa Catarina.
No SENAI, o conhecimento a mais realidade. A proximidade com as
necessidades da indstria, a infraestrutura de primeira linha e as aulas
tericas, e realmente prticas, so a essncia de um modelo de Educao
por Competncias que possibilita ao aluno adquirir conhecimentos, desenvolver habilidade e garantir seu espao no mercado de trabalho.
Com acesso livre a uma eficiente estrutura laboratorial, com o que existe
de mais moderno no mundo da tecnologia, voc est construindo o seu
futuro profissional em uma instituio que, desde 1954, se preocupa em
oferecer um modelo de educao atual e de qualidade.
Estruturado com o objetivo de atualizar constantemente os mtodos de
ensino-aprendizagem da instituio, o Programa Educao em Movimento promove a discusso, a reviso e o aprimoramento dos processos
de educao do SENAI. Buscando manter o alinhamento com as necessidades do mercado, ampliar as possibilidades do processo educacional,
oferecer recursos didticos de excelncia e consolidar o modelo de Educao por Competncias, em todos os seus cursos.
nesse contexto que este livro foi produzido e chega s suas mos.
Todos os materiais didticos do SENAI Santa Catarina so produes
colaborativas dos professores mais qualificados e experientes, e contam
com ambiente virtual, mini-aulas e apresentaes, muitas com animaes, tornando a aula mais interativa e atraente.
Mais de 1,6 milhes de alunos j escolheram o SENAI. Voc faz parte
deste universo. Seja bem-vindo e aproveite por completo a Indstria
do Conhecimento.
Sumrio
Contedo Formativo
Apresentao
46 Unidade de estudo 5
68 Unidade de estudo 10
Pacotes, como
Organizar suas
Classes
11
Interface
69
12 Unidade de estudo 1
Introduo a
Programao
Orientada a Objeto
47
72 Unidade de estudo 11
Programao
Concorrente
e Threads
50 Unidade de estudo 6
Herana
13
14
51
Seo 1 - Reaproveitamento
de cdigo
15
54
20
Seo 4 - Mtodos e
atributos
Seo 2 - Reescrita de
mtodos
73
56 Unidade de estudo 7
26 Unidade de estudo 2
Polimorfismo
Acessibilidade
57
27
31
Seo 2 - Encapsulamento
Seo 1 - Polimorfismo
60 Unidade de estudo 8
Agregao e
Composio
36 Unidade de estudo 3
Construtores
61
37
Seo 1 - Construtores
42 Unidade de estudo 4
64 Unidade de estudo 9
Classes Abstratas
Sobrecarga de
Mtodos
65
43
Seo 1 - Agregao e
composio
Seo 1 - Sobrecarga de
mtodos
Seo 1 - Interface
Seo 1 - Programao
concorrente e threads
Finalizando
79
Referncias
81
Contedo Formativo
Carga horria da dedicao
Carga horria: 90 horas
Competncias
Analisar e implementar os princpios da programao orientada a objetos para
soluo de problemas computacionais.
Conhecimentos
Orientao a objetos: abstrao, classes, objetos e instncias.
Comentrios.
Construtores.
Encapsulamento.
Herana.
Interface de desenvolvimento (IDE).
Mtodos e atributos.
Habilidades
Diferenciar programao orientada a objetos de programao estruturada.
Aplicar os conceitos de orientao a objetos.
Utilizar interface de desenvolvimento (IDE) de sistemas orientados a objetos.
Atitudes
Organizao e zelo na utilizao de equipamentos.
Foco no contedo trabalhado.
Acesso a stios relacionados ao tema trabalhado.
Organizao e limpeza dos ambientes coletivos.
Dedicao e empenho nas atividades curriculares e extracurriculares.
Capacidade de abstrao.
Trabalho em equipe.
Apresentao de novas solues para situaes problemas.
Cumprimento de prazos.
Anlise crtica de suas produes.
Apresentao
Bem-vindo disciplina de Programao Orientada a Objetos I!
Voc tem em mos, um material que foi preparado para assessorar o
aperfeioamento de seus conhecimentos como futuro profissional da
indstria de Tecnologia da Informao (TI).
A disciplina de Programao Orientada a Objetos tem como principal
objetivo prepar-lo para desenvolver sistemas com um novo paradigma
de programao, mais fcil de entender, de manutenir e de desenvolver
novas funcionalidades.
Para isso, a disciplina apresentar conceitos referentes programao
orientada a objeto, desde declaraes simples de variveis at a utilizao
de recursos mais complexos, como herana entre classes. Certamente,
esse material ir ajud-lo no desenvolvimento profissional, abordando
um tema que base para a maioria dos grandes sistemas desenvolvidos.
Bons estudos!
Dieison Grumovski
Dieison Grumovski graduado em Cincia da Computao
pela Universidade do Estado de
Santa Catarina (UDESC) e ps-graduado em Engenharia da
Produo pela Faculdade de
Tecnologia Internacional (FATEC). Atua no SENAI em Joinville como instrutor de cursos
tcnicos em informtica, tendo
atuado tambm como instrutor
nos cursos de aprendizagem
industrial. Ainda no SENAI trabalhou como pesquisador desenvolvendo um projeto com a
tecnologia de identificao por
radio frequncia (RFID). Atualmente, alm das atividades de
docncia, atua como Analista de
Sistemas, trabalhando com tecnologia e inovao na rea de
Gerenciamento Eletrnico de
Documentos (GED) e Gerenciamento de Processos de Negcio
(BPM) na empresa TOTVS S.A.
em Joinville.
11
Unidade de
estudo 1
Sees de estudo
Seo 1 - Relao com o mundo real
Seo 2 - Relao com o mundo da
programao
Seo 3 - Classes e objetos
Seo 4 - Mtodos e atributos
Introduo a Programao
Orientada a Objeto
SEO 1
13
SEO 2
14
Com base nessa anlise, j possvel definir alguns itens como classes obrigatrias do nosso sistema.
Veja:
Locadora
Cliente
Endereo
Categoria
Filme
Mdia
Funcionrio
DICA
Para facilitar o estudo e entendimento do material,
ser utilizado o exemplo da
videolocadora. Nos exerccios, ser empregado o de
uma fbrica de carros e motos. Esse processo vai facilitar o seu desenvolvimento,
pois voc poder utilizar os
exemplos do material para
desenvolver as atividades.
E, agora que voc entendeu
como definir as classes do
seu sistema, coloque em
prtica o conhecimento, realizando o exerccio 1 do caderno de atividades prticas.
nome;
tempo de durao;
ano de lanamento;
categoria.
DICA
Aproveite e defina os atributos para cada classe que
voc identificou para o seu
sistema de fbrica de carros
e motos, resolvendo o exerccio 2 do caderno de atividades prticas.
SEO 3
Classes e objetos
At agora, voc aprendeu a definir as classes e seus atributos, tornando possvel o desenvolvimento de um sistema para uma videolocadora.
Agora, veja como criar essas classes, aplicando a linguagem de programao Java, utilizada no desenvolvimento de sistemas orientados a objetos. Sero usadas as classes j definidas.
Voc j sabe que uma classe uma representao de um objeto. Agora,
vamos repassar isso para o computador, para que por meio dessa classe,
possamos entender e utilizar os objetos criados a partir dela. Para criarmos uma classe, devemos seguir um padro, que o seguinte:
Os modificadores de acesso (sero estudados na unidade de estudo seguinte) no so obrigatrios. A palavra reservada class, identifica a classe, seguida por seu nome. Para identificar onde a classe comea e onde
termina, utilizam-se as chaves. Elas definem o bloco da classe, que
onde os atributos sero colocados.
Sabendo isso, em Java, a classe filme definida anteriormente fica assim:
class Filme {
String nome;
String categoria;
int duracao;
int anoLancamento;
}
DICA
Teste o diagrama de classe,
realizando o exerccio 3 do
caderno de atividades prticas.
15
DICA
Aproveite que voc acabou de definir a classe Filmes, e realize o exerccio 4 do caderno de atividades prticas.
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
}
}
Como existem os tipos int, float, char, entre outros, todas as classes que
criamos, se tornam tipos, e os atributos destes, podem receber objeto
dessa classe.
No exemplo, criamos uma varivel chamada filme01, que do tipo Filme, e corresponde classe Filme, que criamos no incio dessa seo.
O responsvel por criar o objeto o new, para isso, basta utilizar essa
palavra reservada na frente do nome da classe que deseja criar o objeto,
seguido de um abre e fecha parnteses (o significado dos parnteses
estudaremos posteriormente). Dessa forma:
new Filme();
Pronto, j sabemos como criar um objeto do tipo Filme. Agora precisamos utiliz-lo, para isso, precisamos armazen-lo em uma varivel. Foi
por esse motivo que criamos a varivel filme01 do tipo Filme. Dessa
forma voc armazena o objeto no atributo filme01. Veja
16
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
filme01.nome = Avatar;
filme01.categoria = Fico Cientfica;
filme01.anoLancamento = 2009;
filme01.duracao = 166;
}
}
Para acessar um atributo de um objeto, basta utilizar o ponto como operador de acesso.
DICA
Antes de prosseguir, realize os exerccios 5 e 6 do caderno de atividades prticas.
Em um sistema, pode-se criar quantos objetos forem necessrios. No
nosso exemplo, precisaremos criar vrios, um para cada filme cadastrado no sistema, por isso, basta utiliza a palavra reservada new vrias
vezes. Observe:
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
filme01.nome = Avatar;
filme01.categoria = Fico Cientfica;
filme01.anoLancamento = 2009;
filme01.duracao = 166;
Filme filme02;
filme02 = new Filme();
//acessar e setar valores aos atributos
}
}
17
No exemplo a seguir, correto dizer que o atributo filme01 do tipo Filme, possui uma referncia para acessar o objeto. E isso ocorre em todo
o Java, sempre teremos atributos referncia, nunca objetos.
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
}
}
18
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
filme01.nome = Avatar;
filme01.categoria = Fico Cientfica;
filme01.anoLancamento = 2009;
filme01.duracao = 166;
Filme filme02;
filme02 = new Filme();
filme02.nome = Quem quer ser um milionrio;
filme02.categoria = Drama;
filme02.anoLancamento = 2009;
filme02.duracao = 121;
filme01 = filme02;
System.out.println(filme01.nome);
}
}
19
DICA
Faa o teste, realizando o
exerccio 7 do caderno de
atividades prticas.
Agora imagine, se fizermos alguma alterao em qualquer um dos objetos, o que ir acontecer? Observe o exemplo:
class Locadora {
public static void main(String[] args) {
Filme filme01;
filme01 = new Filme();
filme01.nome = Avatar;
filme01.categoria = Fico Cientfica;
filme01.anoLancamento = 2009;
filme01.duracao = 166;
Filme filme02;
filme02 = new Filme();
filme02.nome = Quem quer ser um milionrio;
filme02.categoria = Drama;
filme02.anoLancamento = 2009;
filme02.duracao = 121;
filme01 = filme02;
filme02.categoria = Ao;
System.out.println(filme01.categoria);
}
}
Nesse caso, alteramos a categoria do objeto filme02, e logo abaixo estamos imprimindo o valor da categoria do objeto filme01. O que ser
impresso para o usurio? Fico cientfica, drama ou ao?
Na figura anterior, vimos que ao atribuir um atributo referncia ao outro, eles faro referncia ao mesmo endereo de memria, ou seja, eles
20
Na prxima seo, voc aprender a criar e invocar mtodos
criados dentro de suas respectivas
classes.
SEO 4
Mtodos e atributos
At o momento voc aprendeu
a definir uma classe e seus atributos, mas e agora? O que fazer
com eles?
Dentro de cada classe preciso definir o que ela faz, ou seja,
o seu comportamento. Definindo as funes dentro da prpria
classe, fica fcil encontrar no programa onde os procedimentos
so realizados. Essas funes so
chamadas de mtodos, que so os
responsveis por realizar as operaes com os objetos.
Todo mtodo possui uma assinatura, que vai identific-lo em todo
o sistema. Essa assinatura composta por quatro itens, modificadores de acesso, retorno, nome
do mtodo e seus parmetros. Os
modificadores de acesso sero estudados na unidade de estudo seguinte. A estrutura dos mtodos
fica da seguinte forma:
Os modificadores de acesso no so obrigatrios. O nmero de parmetros no limitado, podem ser utilizados quantos forem necessrios, e
caso no o sejam, o mtodo pode no receber parmetros.
Dentro da classe Locadora, que estamos utilizando como exemplo, podemos criar um mtodo para cadastrar um novo filme. Exemplo:
class Locadora {
public static void main(String[] args) {
Locadora loca = new Locadora();
loca.cadastrarFilme();
}
void cadastrarFilme(){
Filme filme01;
filme01 = new Filme();
filme01.nome = Avatar;
filme01.categoria = Fico Cientfica;
filme01.anoLancamento = 2009;
filme01.duracao = 166;
}
}
21
class Locadora {
public static void main(String[] args) {
Locadora loca = new Locadora();
String nome = Avatar;
String categoria = Fico Cientfica;
int anoLancamento = 2009;
int duracao = 166;
loca.cadastrarFilme(nome, categoria, anoLancamento, duracao);
}
void cadastrarFilme(String nome, String categoria, int anoLancamento, int duracao)
{
Filme filme01;
filme01 = new Filme();
filme01.nome = nome;
filme01.categoria = categoria;
filme01.anoLancamento = anoLancamento;
filme01.duracao = duracao;
}
}
22
class Locadora {
public static void main(String[] args) {
Locadora loca = new Locadora();
String nome = Avatar;
String categoria = Fico Cientfica;
int anoLancamento = 2009;
int duracao = 166;
boolean cadastrado;
cadastrado = loca.cadastrarFilme(nome, categoria, anoLancamento, duracao);
if(cadastrado == true){
System.out.print(Filme cadastrado com sucesso.);
}
}
boolean cadastrarFilme(String nome, String categoria, int anoLancamento, int duracao){
Filme filme01;
filme01 = new Filme();
filme01.nome = nome;
filme01.categoria = categoria;
filme01.anoLancamento = anoLancamento;
filme01.duracao = duracao;
return true;
}
}
23
if(cadastrado == true){
System.out.print(Filme cadastrado com sucesso.);
}
24
DICA
Agora, treine, realizando o exerccio 8 do caderno de atividades prticas.
Nessa unidade de estudos, voc aprendeu a definir as classes e seus atributos, tambm aprendeu a criar e invocar mtodos criados dentro de
suas respectivas classes, e a definir o comportamento do cada classe.
Na prxima unidade, voc aprender a controlar o acesso e encapsular.
Continue atento! At l.
25
Unidade de
estudo 2
Sees de estudo
Seo 1 - Controle de Acesso
Seo 2 - Encapsulamento
Acessibilidade
SEO 1
Controle de acesso
Voc j parou para pensar nos
recursos que so utilizados para
proteger voc e a sua casa? Normalmente so colocadas cercas,
muros altos, ces de guarda, alarmes, grades nas janelas e portas,
entre outros, e todos com o mesmo objetivo: controlar o acesso e
proteger. Na programao no
diferente, precisamos controlar o
acesso s classes, atributos e seus
mtodos, e, para que isso seja possvel, utilizam-se os modificadores de acesso.
Como voc j viu na unidade de
estudo anterior, os controladores
de acesso fazem parte das assinaturas dos mtodos, mas eles no
so utilizados apenas em mtodos, podem ser aplicados tambm
a atributos e classes. Eles servem
para proteger e restringir o acesso
a determinadas partes do nosso
sistema.
Imagine que voc trabalha em
uma empresa com muitos funcionrios, e que a empresa trabalha
com pesquisas cientficas, e as
descobertas s podem ser conhecidas por algumas pessoas. Uma
das medidas tomadas para proteger essas informaes, bloqueando o acesso a algumas salas, e
autorizando o acesso de apenas
algumas pessoas. Uma forma de
fazer isso com uso de senhas
para abrir portas, essas senhas daro mais ou menos poder de acesso aos funcionrios.
27
class Locadora {
public static void main(String[] args) {
Locadora loca = new Locadora();
String nome = Avatar;
String categoria = Fico Cientfica;
int anoLancamento = 2009;
int duracao = 166; boolean cadastrado;
cadastrado = loca.cadastrarFilme(nome, categoria, anoLancamento, duracao);
if(cadastrado == true){
System.out.print(Filme cadastrado com sucesso.);
}
}
boolean cadastrarFilme(String nome, String categoria, int anoLancamento, int duracao){
Filme filme01;
filme01 = new Filme();
filme01.nome = nome;
filme01.categoria = categoria;
filme01.anoLancamento = anoLancamento;
filme01.duracao = duracao;
return true;
}
}
28
Sabendo onde aplicar os modificadores, fica fcil utilizar os demais. Nos locais onde colocamos
a palavra public, basta substituir
pelo modificador necessrio, podendo ser protected, private ou
abstract. Os modificadores static
e final so utilizados em conjunto com os demais. Para entender
melhor essa utilizao conjunta,
vamos utilizar a nossa classe Filme para exemplificar.
class Filme {
String nome;
String categoria;
int duracao;
int anoLancamento;
}
29
No exemplo anterior, temos na classe Filme um mtodo de teste chamado testeFilme(), que est sendo utilizado apenas para demonstrar o uso
do modificador de acesso. Esse mtodo cria dois objetos, ou seja, duas
instncias da classe Filme. Aps criar os objetos sero atribudos valores
ao atributo anoLancamento de ambos os objetos. Logo aps impresso
o valor de ambos os atributos dos objetos.
Voc sabe quais valores sero impressos? Lembrando que o atributo em
questo utiliza o modificador static, voc est certo se responder que em
ambas as frases impressas aparecer o ano de 2010.
E voc sabe por que isso ocorreu? Porque o conceito de static de que
o atributo compartilhado por todas as instncias da classe, isto , se
uma instncia tem o valor 2010, todas as outras tambm o tero, com
isso sempre o ltimo valor atribudo ao atributo ser utilizado por todas
as instncias.
Foi preciso criar um mtodo de teste dentro da prpria classe Filme,
para que pudssemos acessar os atributos dela, isso foi necessrio devido ao fato de que todos foram declarados como private, e por isso s
podem ser acessados de dentro da prpria classe.
Da mesma forma que o modificador static utilizado em conjunto com
outros modificadores, o modificador final tambm deve ser utilizado em
conjunto. Confira um exemplo de uso do modificador final.
public class Filme{
private String nome;
private String categoria;
private int duracao;
private final int anoLancamento = 2011;
}
30
O uso do modificador final obriga que um valor seja atribudo ao atributo no momento da criao, por isso precisamos cri-lo e conferir-lhe
o valor 2011. Feito isso, esse atributo no poder mais ser alterado,
sempre vai valer 2011.
E o que acontece se tentarmos atribuir valor a um atributo do tipo final
como mostrado a seguir?
filme01.anoLancamento = 2011;
filme02.anoLancamento = 2010;
DICA
Antes de estudar o encapsulamento, realize os exerccios 9, 10 e 11
do caderno de atividades prticas.
SEO 2
Encapsulamento
O objetivo de se utilizar o encapsulamento, no desenvolvimento de sistemas, agrupar as funcionalidades referentes a um objeto em um nico
lugar, garantindo a segurana no acesso s informaes, facilitando a
busca dos programadores por mtodos dentro do sistema, seja para consultar ou para realizar manutenes.
Imagine que voc precisa alterar o mtodo onde realizado o cadastro
de filmes, em qual classe voc procuraria? Se no existisse o encapsulamento voc poderia ficar perdido, e poderiam existir vrios locais no
seu sistema que realizam essa operao, mas com o encapsulamento o
cadastro de filmes feito por uma nica classe, a Locadora, onde o funcionrio da locadora que realiza o cadastro de todos os filmes. por
isso que esse mtodo foi colocado na classe Filme.
31
Dessa forma ningum ter acesso aos atributos dessa classe a no ser ela
mesma. Agora voc concorda que assim, a classe Filme, no ter utilidade alguma, pois a classe Locadora que fazia uso desses atributos, e com
eles declarados como private, ela no ter mais acesso.
em situaes como esta que entra o uso dos mtodos get e set. Devemos criar os mtodos de acordo com a necessidade do sistema, para
liberar o acesso necessrio aos atributos.
No obrigatria a criao dos dois mtodos, set e get, eles devem
ser criados de acordo com a necessidade do sistema.
32
33
Com o uso dos mtodos set e get, voc pode controlar se outras classes
tero acesso aos atributos ou no. Se voc pretender dar acesso apenas a
gravao de dados nos atributos, basta criar apenas o mtodo set na sua
classe. Porm, se voc quer permitir que outras classes apenas recuperem o valor dos atributos, basta criar na sua classe o mtodo get.
Agora, com os mtodos set e get criados e entendidos, temos que alterar
tambm a forma de acessar os atributos. No mais possvel acess-los
diretamente como estvamos fazendo at agora, daqui em diante teremos que chamar os mtodos set e get, como mostra o exemplo a seguir:
34
DICA
Realize os exerccios do 12 ao 15 do caderno de atividades prticas
e perceba que com o uso dos modificadores de acesso, em conjunto
com a criao dos mtodos set e get, tm-se classes muito mais seguras e organizadas.
Agora que voc j sabe criar os controles de acesso e encapsular, est
pronto para aprender o porqu de criar dessa maneira. Ento, prepare-se
e bom estudo!
35
Unidade de
estudo 3
Sees de estudo
Seo 1 - Construtores
Construtores
SEO 1
Construtores
Se voc observar a criao de um objeto, perceber algo parecido com a
chamada de um mtodo, veja no exemplo a classe Locadora:
public class Locadora {
public static void main(String[] args) {
Locadora loca = new Locadora();
String nome = Avatar;
String categoria = Fico Cientfica;
int anoLancamento = 2009;
int duracao = 166;boolean cadastrado;
cadastrado = loca.cadastrarFilme(nome, categoria, anoLancamento, duracao);
if(cadastrado == true){
System.out.print(Filme cadastrado com sucesso.);
}
}
public boolean cadastrarFilme(String nome, String categoria, int anoLancamento, int duracao){
Filme filme01;
filme01 = new Filme();
filme01.nome = nome;
filme01.categoria = categoria;
filme01.anoLancamento = anoLancamento;
filme01.duracao = duracao;
return true;
}
}
new Filme();
37
Filme(){
}
Por isso, mesmo que voc no crie o mtodo construtor dentro da classe, acredite, ele esta l!
Agora voc pode ter ficado com outra dvida: se o Java cria como padro um mtodo construtor para todas as classes, por que voc precisa
cri-los?
Sempre que se cria um mtodo construtor para uma classe, o mtodo
construtor default deixa de ser utilizado, logo o seu mtodo construtor
se torna o principal da classe. Imagine que antes de tudo, o seu mtodo
ser chamado e voc poder fazer qualquer operao nesse momento,
voc pode iniciar atributos, fazer chamadas a outros mtodos, enfim,
definir como seu objeto ser criado.
No exemplo a seguir, foi criado um mtodo construtor que, antes de
criar o objeto do tipo Filme, inicializa o atributo nome com um valor
qualquer. Veja:
38
Fazendo isso, sempre que um objeto do tipo filme for criado, ele j ser
criado com o nome Avatar. Fazendo dessa forma, no fica muito usual,
uma vez que no existe apenas o filme Avatar, mas sim vrios filmes
que sero cadastrados. Ento que outra forma de setar valor para esse
atributo pode ser usada?
O mtodo construtor aceita a passagem de parmetros. Observe o
exemplo:
Nesse caso, podemos garantir que sempre que um objeto do tipo filme
for criado, ele possuir um nome, pois isso feito no seu construtor, e
se um nome no for passado a ele, o objeto no ser criado.
A forma de criar esse objeto agora mudou um pouco, devido a passagem
do parmetro, na nossa classe Locadora a criao do objeto Filme fica
conforme o exemplo a seguir:
39
Observe que nosso mtodo main no foi alterado, apenas o mtodo cadastrarFilme sofreu alteraes. A criao do objeto Filme agora recebeu
um parmetro, correspondente ao nome do Filme e no mais necessrio setar valor para o atributo nome da classe Filme, uma vez que agora
isso feito dentro do mtodo construtor.
Apesar de ser chamado de mtodo construtor, ele no um simples
mtodo. Pode-se dizer que um mtodo especial, pois no pode possuir retorno e s pode ser chamado no momento de criao de um
objeto.
Uma classe pode ter quantos mtodos forem necessrios para sua utilizao, e no diferente para mtodos construtores, que permitem mais
de um mtodo construtor em uma mesma classe. Veja o exemplo:
40
Nesse caso criamos dois mtodos construtores, onde um recebe apenas o nome do filme como parmetro, e o segundo recebe o nome e
a categoria. Dependendo da necessidade, pode-se utilizar um ou outro
para criar nossos objetos do tipo Filme e, para utiliz-los basta fazer da
seguinte forma:
Filme filme01 = new Filme(nome);
ou
Filme filme01 = new Filme(nome, categoria);
Os mtodos construtores so
muito importantes, pois com
eles possvel controlar e definir
como um objeto ser criado, e se
ser realizada alguma operao no
momento de sua criao.
DICA
Os exerccios 16, 17 e 18 do
caderno de atividades prticas so sobre os mtodos
construtores. Que tal resolv-los e testar o que acabou
de aprender?
possvel tambm chamar um construtor de dentro de outro, lembrando do conceito do mtodo construtor que diz que ele s pode ser chamado durante a criao do objeto, e, como est sendo criado dentro
de outro mtodo construtor ento pode ser chamado de dentro deste.
Observe o exemplo.
41
Unidade de
estudo 4
Sees de estudo
Seo 1 - Sobrecarga de mtodos
Sobrecarga de Mtodos
SEO 1
Sobrecarga de mtodos
O fato de criarmos mtodos com o mesmo nome em uma mesma classe
chamado de sobrecarga de mtodos, ou ainda de overloading.
O que no pode existir em uma mesma classe, so mtodos com assinaturas iguais. O que isso quer dizer? Quer dizer que no se pode ter dois
mtodos com o mesmo nome, e com os mesmos tipos e nmeros de
parmetros. Observe o diagrama a seguir para entender melhor o conceito de sobrecarga.
43
DICA
Como os mtodos tero o mesmo nome e, provavelmente, sero
utilizados para realizao de tarefas semelhantes, importante escolher um nome mais apropriado que identifique todas as tarefas de
modo a no gerar confuso no momento de sua utilizao.
E como saber qual mtodo est sendo chamando no momento da execuo quando h nomes repetidos?
Voc no precisa se preocupar com isso pois, quem define, o compilador, levando em considerao as diferenas dos mtodos para utiliz-los
de acordo com suas caractersticas, por exemplo:
44
Neste caso seria chamado o ltimo mtodo, pois, ele o nico que recebe apenas um parmetro.
Tenha bastante cuidado ao fazer sobrecarga com o mesmo nmero de parmetros, pois o compilador diferencia o tipo dos parmetros, e no o nome
deles.
Nesse exemplo apresentado, foram alterados os nomes de dois parmetros, de anoLancamento para ano, e de durao para tempo. Essa
mudana no caracteriza uma sobrecarga, e o seu programa no ir funcionar, pois existem dois mtodos exatamente iguais, e isso no permitido.
DICA
Utilizando o caso da fbrica de carros e motos, teste a sobrecarga,
realizando os exerccios 19 e 20 do caderno de atividade prticas.
45
Unidade de
estudo 5
Sees de estudo
Seo 1 - Pacotes, como organizar
suas classes
\br\com\poo\locadora
br.com.poo.locadora
Observe que na estrutura de diretrios do sistema operacional, os nomes das pastas so separados por barras \, e os packages so divididos
por pontos .. Da mesma formaque existem padres, no momento de
criar nomes de classes, mtodos e variveis, existe um padro para criao de pacotes, nesse caso, todos os pacotes devem ser escritos apenas
com letras minsculas, independente se os nomes so compostos por
mais de uma palavra.
Deve-se referenciar o pacote, onde a classe est gravada e no incio desta, informando sempre a palavra package seguida do caminho completo
do pacote. Para entender melhor, veja esse exemplo: imagine que a classe
Pessoa encontrasse dentro do pacote br.com.poo.entidade. Tal classe
ficaria assim:
47
package br.com.poo.entidade.Pessoa;
public class Pessoa {
private String nome;
private String telefone;
private String rg;
private String cpf;
private String estadoCivil;
private String sexo;
//implementao dos mtodos
}
Dentro de um mesmo pacote, podem estar quantas classes forem necessrias, e todas tm acesso direto umas as outras - o que estava sendo
feito at o momento - pois todas estavam em um mesmo pacote.
Se quisssemos acessar a classe Pessoa, de dentro da classe Locadora,
imaginando que nesse momento elas esto no mesmo pacote, poderamos fazer um acesso direto por meio de Pessoa pessoa = new Pessoa();.
Confira:
package br.com.poo.entidade.Locadora;
public class Locadora{
public static void main(String[] args) {
Pessoa pessoa = new Pessoa();
pessoa.getEndereco().setBairro(Bom Retiro);
pessoa.getEndereco().setCep(89222-365);
//...
}
}
48
Para resolver isso, o Java possui uma palavra reservada chamada import,
que serve para importar um pacote para dentro da classe onde o import
foi utilizado. Com isso no existe a necessidade de digitar todo o caminho do pacote de uma classe toda vez que desejarmos fazer referncia
a ela.
Com a classe Locadora em outro diretrio e utilizando o import para
fazer acesso classe Pessoa, e com a classe Locadora em outro diretrio,
esta ficaria da seguinte forma:
package br.com.poo.locadora.Locadora;
import br.com.poo.entidade.Pessoa;
public class Locadora{
public static void main(String[] args) {
Pessoa pessoa = new Pessoa();
pessoa.getEndereco().setBairro(Bom Retiro);
pessoa.getEndereco().setCep(89222-365);
//...
}
}
Note que agora, o package da classe mostra que o pacote da classe Locadora no mais o entidade, e sim o pacote locadora.
package br.com.poo.locadora.Locadora;
J o uso do import, indica que pode-se utilizar a classe Pessoa, que est
dentro do pacote br.com.poo.entidade diretamente, como se a classe
estivesse dentro do mesmo pacote. A instruo que permite isso :
import br.com.poo.entidade.Pessoa;
import br.com.poo.entidade.*;
O import vale tambm para classes externas ao projeto, por exemplo, se quisermos utilizar uma
classe do Java, dentro de alguma
das classes, como a ArrayList do
Java, que implementa uma lista,
para que se tenha acesso a essa
classe, ser necessrio, obrigatoriamente, fazer um import dela
para a classe em que se quer utiliz-la. Portanto, o import ficaria
da seguinte forma:
import java.util.ArrayList;
49
Unidade de
estudo 6
Sees de estudo
Seo 1 - Reaproveitamento de cdigo
Seo 2 - Reescrita de mtodos
Herana
SEO 1
Reaproveitamento de
cdigo
Os sistemas, de um modo geral,
evoluram muito nos ltimos anos
e para que essa evoluo acontecesse, foi necessrio escrever muitas linhas de cdigo fonte. Agora,
imagine classes imensas e projetos
com centenas de classes; ser que
tudo isso era mesmo necessrio?
Ser que no h uma forma de
reutilizar partes do cdigo fonte
e tornar o sistema mais simples?
Essa uma das vantagens de se
utilizar a herana.
Antes de entender o que a herana na programao, pense na
sua vida, o que herana? Pense
em caractersticas genticas, j lhe
disseram como voc parecido
com seu pai ou com sua me?
Pois bem, isso herana, seus pais
herdaram caractersticas do seus
avs, e voc herdou caractersticas
dos seus pais.
A figura a seguir representa a herana gentica, que o filho herda
caractersticas do pai.
51
Observando o exemplo, nota-se que no h diferena nenhuma ao acessar os atributos que a classe Funcionario est herdando da Pessoa,
como se os atributos fossem exclusivamente da classe Funcionario.
Pode acontecer de se herdar mtodos com determinadas caractersticas,
que no queremos utilizar em outras classes, e para refazer esse mtodo,
existe um mecanismo chamado de reescrita de mtodos. Esse o assunto da prxima seo de estudo.
53
SEO 2
Reescrita de Mtodos
Nem sempre os mtodos herdados possuem o comportamento que queramos. Nesses casos, necessrio reescrev-los. Imagine que na classe
Pessoa exista um mtodo para cadastrar o cpf de uma pessoa, porm,
esse mtodo no faz nenhum tipo de validao para saber se o nmero
informado vlido. Para fazer essa validao, necessrio reescrever o
mtodo de cadastro do cpf. Observe:
Nesse exemplo, temos um mtodo chamado cadastroCpf na classe Pessoa, onde ele apenas seta o valor do cpf informado no atributo da classe,
sem fazer qualquer tipo de validao.
Na classe Funcionario, reescrevemos o mtodo de cadastro do cpf fazendo uma validao simples com relao ao tamanho do nmero informado. Tal documento, para ser vlido, deve possuir pelo menos onze
dgitos, logo, se informar menos, o cpf invlido.
54
DICA
Agora, realize os exerccios 22 ao 26 do caderno de atividades prticas e teste o que acabou de aprender. Ah! Preste ateno na informao do exerccio 25, h um comentrio sobre duas expresses novas.
Continue atento!
55
Unidade de
estudo 7
Sees de estudo
Seo 1 - Polimorfismo
Polimorfismo
SEO 1
Polimorfismo
Se entrar algum na locadora e pedir para falar com alguma pessoa, esta
pode ser tanto um cliente como um funcionrio, certo? Afinal, cliente e
funcionrio so pessoas. Com base nessa ideia, se pode fazer a seguinte
operao no nosso sistema:
public class Locadora{
public static void main(String[] args) {
Funcionario funcionario = new Funcionario();
funcionario.setNome(Joo);
funcionario.setRg(89898789);
funcionario.setCpf(021.234.543-90);
funcionario.setTelefone((47)30001122);
funcionario.setSexo(Masculino);
funcionario.setEstadoCivil(Casado);
funcionario.setCarteiraTrabalho(9876234653);
funcionario.setSalario(2000);
A operao realizada s possvel graas ao polimorfismo, que a capacidade de fazer referncia a um objeto de formas diferentes.
No exemplo, estamos nos referenciando a um funcionrio como sendo uma pessoa. Mas tome cuidado, um objeto pode fazer referncia a
outros objetos, porm, ele nunca muda de tipo. Se ele foi criado como
sendo um objeto do tipo Funcionario, ele sempre vai ser assim, at
que seja destrudo.
Veja outro exemplo para entender melhor. Imagine que na classe Pessoa tenha um mtodo chamado queTipoSou, que imprime uma frase
mostrando de que tipo um determinado objeto. Esse mesmo mtodo
criado na classe Funcionario. Fazendo isso, temos as seguintes classes:
57
pessoa.queTipoSou();
58
59
Unidade de
estudo 8
Sees de estudo
Seo 1 - Agregao e composio
Agregao e Composio
SEO 1
Agregao e Composio
Assim como na herana, que uma classe estende de outra para utilizar
seus atributos e mtodos, a agregao e a composio tambm tm esse
mesmo objetivo. Veja agora o que agregao e composio, e qual a
diferena entre esses conceitos com relao herana.
Os conceitos de agregao e composio, inicialmente, podem gerar alguma dvida, mas, a forma de utilizar exatamente a mesmo, o que
muda o momento em que cada um ser utilizado.
A agregao ou a composio devem ser utilizadas sempre que existir
a necessidade de caractersticas de outro objeto, dentro de uma classe.
Veja um exemplo, para entender melhor.
Nesse exemplo, temos uma classe chamada Pessoa, alguns de seus atributos so correspondentes a um endereo, como endereo, bairro, cidade e cep. Ns poderamos criar outra classe, chamada Endereco, e nesta
colocar todos os atributos que esto na classe Pessoa e que se referem
a um endereo. Com isso, criaremos uma nova classe, que representa
um endereo, e que pode ser utilizada dentro da classe Pessoa, para isso,
basta criar um atributo do tipo Endereco dentro da classe Pessoa. Veja.
61
Agora, com a classe Endereco j criada, possvel retirar todos os atributos que representam um endereo e que esto dentro da classe Pessoa.
Mas, uma pessoa precisa de um endereo, ento, como fazer? Vamos
utilizar a classe que acabamos de criar, chamada Endereco, e fazer uma
agregao. A implementao fica desta forma:
Note que agora temos acesso aos atributos do endereo por meio do
atributo declarado, dentro da classe Pessoa do tipo Endereco. Para ter
acesso aos atributos, basta fazer o seguinte:
62
A composio definida quando pelo menos uma das classes no tem sentido, quando utilizada separadamente da outra.
63
Unidade de
estudo 9
Sees de estudo
Seo 1 - Classes abstratas
Classes Abstratas
SEO 1
Classes abstratas
As classes abstratas no podem ser utilizadas como instncia direta, ou
seja, voc no pode utilizar o new para criar um objeto de uma classe
abstrata. Mas para que serve uma classe, se voc no pode instanci-la?
Podemos dizer que uma classe abstrata utilizada como um molde
para outras classes. Para fazer isso, vamos utilizar a herana. Vamos trabalhar novamente com as classes Pessoa, Funcionario e Cliente?
No sistema de locadora, teremos que cadastrar os funcionrios e os
clientes da loja. Como funcionrios e clientes so pessoas, faz sentido
ter um cadastro de pessoas, mas ao cadastrar preciso saber quem
funcionrio e quem cliente. Podemos, ento, utilizar uma classe Pessoa
para reunir todas as caractersticas em comum das demais classes, que
podem ser consideradas pessoas.
Fazendo isso, teremos uma classe modelo, que ser a Pessoa, e outras
classes que iro estender dessa modelo para reaproveitar suas caractersticas. Para definir uma classe como sendo um modelo, se utiliza a
palavra chave abstract. Dentro dessa classe, podemos ou no, ter mtodos abstratos, assim como, ter mtodos no abstratos. Tornando a classe
Pessoa abstrata, ela ficaria assim:
Agora temos a classe Pessoa como sendo abstrata, note que apenas adicionamos a palavra chave abstract no incio da criao da classe. Alm
dessa alterao, criamos tambm um mtodo abstrato, o mtodo cadastroCpf, isso significa que na classe abstrata Pessoa existe apenas a
assinatura do mtodo, e este dever ser implementado nas classes que
estenderem da classe Pessoa. Logo, as classes Funcionario e Cliente ficam da seguinte forma:
65
filhas.
66
67
Unidade de
estudo 10
Sees de estudo
Seo 1 - Interface
Interface
SEO 1
Interface
interface Pessoa {
String nome = Maria;
}
Nesse exemplo, no temos mais a palavra class, e sim interface. Quando existir um atributo criado dentro de uma interface, ele j deve ser
inicializado, pois, mesmo sem informar, esse atributo final (constante),
alm de esttico e pblico. Alm dessas mudanas, os mtodos no podem mais ser implementados. Observe que no exemplo, temos apenas a
assinatura do mtodo.
Quando utilizamos uma interface em outra classe, dizemos que estamos
implementando uma interface, para isso, utilizamos a palavra reservada implements. Observe o exemplo aplicado s classes Funcionario e
Cliente.
69
Nesse exemplo, separamos por vrgula trs interfaces - Pessoa, SegundaInterface e TerceiraInterface, pois, estamos nos responsabilizando por
assinar trs contratos, e com isso, temos que implementar os mtodos
assinados em todas as interfaces.
70
Deve ficar bem claro que quando se fala em interface, que, aqui, no
definido como as coisas so feitas (implementao), mas sim, o que
ser feito (assinatura). Na programao orientada a objeto, muito
importante pensar dessa forma, fazendo assim, as classes acabam
ficando mais fceis de entender e de manutenir.
DICA
Na prxima unidade de estudos, voc vai entender como o computador consegue executar vrias coisas ao mesmo tempo, mas antes,
teste o que aprendeu nesta unidade realizando os exerccios 33 e 34
do caderno de atividades prticas. At mais!
71
Unidade de
estudo 11
Sees de estudo
Seo 1 - Apndice Programao
concorrente e threads
Apndice Programao
Concorrente e Threads
Seo 1
Programao
concorrente e threads
Voc j se perguntou como o computador consegue executar vrias coisas ao mesmo tempo? Essa uma grande vantagem que a mquina tem
sobre os seres humanos.
Ouvir msica e utilizar um editor de texto para escrever sobre algo que
voc est pesquisando na internet... Como o computador consegue fazer
isso ao mesmo tempo? O computador divide essas tarefas em processos,
ou seja, cada ao executada por ele um novo processo. Por serem executados todos ao mesmo tempo, dizemos que so processos paralelos.
At aqui tudo bem, cada atividade um processo, mas imagine que o
nosso sistema esteja sendo executado, ento, torna-se um processo para
o sistema operacional do computador. Agora, imagine que dentro do
nosso sistema precisamos fazer mais de uma atividade por vez, como
fazer isso? Precisamos enviar um email, ao mesmo tempo em que um
cliente realiza um cadastro de usurio ou exibir a interface grfica para
que o usurio possa visualizar o sistema.
Tudo isso est sendo feito em paralelo, ento, como controlar isso tudo?
Criar mais processos? Nesse caso no, existe outro conceito que so as
threads. Se dentro de um processo, temos vrias atividades, que devem
ser executas em paralelo, ser preciso criar threads para gerenciar tudo
isso.
No Java, existe mais de uma forma de se utilizar as threads, porm, aqui
voc vai aprender a forma considerada mais correta, que implementando a interface Runnable. Essa interface implementa uma thread. Fazendo isso no Java, teremos a seguinte classe:
73
Devemos criar um objeto da classe Sistema, que a classe que implementa uma thread, feito isso, colocamos um valor para o atributo nome
e em seguida criamos uma nova thread para receber o nosso sistema. A
chamada ao mtodo start() que vai iniciar a execuo do mtodo run()
da classe sistema. Nesse caso, a frase que ser impressa a seguinte:
74
Com a alterao realizada no mtodo main, quatro pessoas esto iniciando seus sistemas, nesse caso, sero impressas quarenta frases, s que
dessa vez, elas sero impressas intercaladas, pois a execuo dos sistemas
realizada em paralelo, devido ao uso das threads. As frases ficam da
seguinte forma:
75
76
public void iniciarSistema(){
synchronized(this){
int i = 0;
while(i<10){
System.out.println(Sistema + i + em execuo!);
i++;
}
}
//continuao do mtodo
}
Nesse caso, mais de uma thread pode chegar at o mtodo iniciarSistema, porm no trecho que est entre o bloco synchronized, apenas uma
thread poder ser executada por vez.
Utilizando as threads, possvel realizar vrias atividades ao mesmo
tempo no mesmo sistema, e ainda controlar quando uma ou mais threads
podem acessar um determinado mtodo ou trecho de cdigo do nosso
sistema simultaneamente.
77
Finalizando
Parabns, voc acaba de concluir mais uma etapa do Curso Tcnico em Informtica. Durante
o estudo voc pde entender que tudo o que est ao nosso redor pode se tornar um objeto e
pode ser representado dentro de um sistema. Entendeu que o reaproveitamento de cdigo reduz o tempo de desenvolvimento de um sistema, auxilia no momento de manutenir o sistema
e facilita o entendimento, entre outras vantagens.
A orientao a objetos empregada em inmeras linguagens e utilizada por grandes empresas. Tendo conhecimento dos conceitos fundamentais da POO, o profissional aprende
outras linguagens mais facilmente, sem contar que o conhecimento das prticas da orientao
a objeto um grande diferencial no momento de buscar uma vaga no mercado de trabalho.
recomendvel que, de vez em quando, voc releia as unidades de estudos e aperfeioe
seus conhecimentos buscando outras fontes de informao. Nunca pare de estudar, a informtica est em constante evoluo, e nosso papel acompanh-la para sermos profissionais
de sucesso.
Sucesso e at uma prxima!
79
Referncias
DEITEL, Paul J. Java: como programar. 6. ed. So Paulo: Pearson, 2005. 1152 p.
SIERRA, Kathy; BATES, Bert. Use a cabea! Java. Traduo da segunda edio. Rio de
janeiro, RJ: Editora Alta Books, 2005. 470 p.
Bibliografia complementar
LUCKOW, Decio Heinzelmann; MELO, Alexandre Altair de. Programao Java Para a
Web Aprenda a desenvolver uma aplicao financeira pessoal com as ferramentas
mais modernas da plataforma Java. So Paulo: Novatec, 2010.
81
Design Educacional
Evelin Lediani Bao
Capa, Ilustraes, Tratamento de Imagens
Dimitre Camargo Martins
Diego Fernandes
Luiz Eduardo Meneghel
Diagramao
Carlos Filip Lehmkuhl Loccioni
Reviso e Fechamento de Arquivos
Daniela de Oliveira Costa
Juliana Vieira de Lima
Reviso Ortogrfica e Normatizao
SENAI/SC em Jaragu do Sul
83