unidade: introdução à poo (programação orientada a …...dentre as linguagens que aceitam oo,...
TRANSCRIPT
-
0
Unidade: Introdução à POO
(Programação Orientada a
Objetos)
-
1
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Unidade: Introdução à POO (Programação Orientada a Objetos)
Paradigmas de Programação
Um paradigma de programação fornece (e determina) a visão que o
programador possui sobre a estruturação e execução de um programa.
Assim como ao resolver um problema podemos adotar uma entre
variadas metodologias, ao criar um programa podemos adotar um determinado
paradigma de programação para desenvolvê-lo.
No início da década de 70 foi desenvolvido um paradigma de
programação conhecido como programação estruturada ou procedimental.
Nesse paradigma o código é composto de vários subprogramas ou subrotinas
que são ligadas através de chamadas. O foco da programação eram os
algoritmos criados nas rotinas e a organização dos dados ficava em segundo
plano.
Dentre as linguagens que usam paradigma estruturado podemos citar a
linguagem C, Pascal, Cobol, Basic, Clipper, etc.
Por outro lado, no paradigma de POO o foco da programação é em cima
dos dados e sua estruturação e em seguida examina os algoritmos que
manipularão esses dados.
Embora a POO exista desde a década de 60, os últimos 10 anos têm
visto um crescimento exponencial no uso e aceitação de tecnologias de objeto,
sendo o paradigma mais utilizado no momento para o desenvolvimento de
projetos de software. Dentre as linguagens que aceitam OO, podemos destacar
SMALTALK, SIMULA-67, EIFFEL, Modula-3, JAVA, C++, Object Pascal, C#,
etc.
Figura 1 - Modelos de Programação
-
2
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
As linguagens OO diminuem a distância entre o mundo real e o
computacional, pois propõem a abstração e modelagem de objetos do mundo
real no mundo virtual através de modelos matemáticos ou classes, diferente da
programação estruturada onde os algoritmos eram muito abstratos e somente
compreendidos por programadores.
Na POO a modelagem de dados é a parte mais importante do projeto
através de classes que representam entidades do mundo real. As classes (ou
modelos) geram objetos que se comunicam com outros objetos através de
mensagens. Temos vários mecanismos na POO para facilitar o
reaproveitamento de código como herança, polimorfismo e encapsulamento,
nos quais entraremos com mais detalhes nas unidades seguintes.
De certa forma, um programa OO se torna uma simulação viva do
problema que está se tentando resolver. Esse paradigma exige que o analista
tenha uma visão global do problema em nível conceitual, permitindo o uso de
substantivos, adjetivos e verbos do domínio do seu problema.
Porque usar POO
Os sistemas projetados atualmente são maiores, mais complexos e
sujeitos a constantes alterações e adaptações aos diversos ambientes
computacionais. Através do encapsulamento de informações, a reutilização de
esforços empregados em projetos anteriores e a modificação do sistema se
tornaram mais fáceis.
A metodologia OO é baseada em “objetos do mundo real”, e por este
motivo, é mais intuitiva ao ser humano, tais como: objetos e atributos, classes e
membros, estruturas e componentes, ação e reação. Os métodos de
desenvolvimento de software anteriores ao surgimento desse paradigma
organizam a especificação de um sistema de acordo com suas funções ou com
os dados manipulados. Geralmente, esses métodos apresentam dificuldades
na transição da representação do sistema em uma fase para outra do processo
de desenvolvimento (da Análise para o Projeto e, do Projeto para a
Implementação).
-
3
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Em um sistema orientado a objetos, os dados e todas as operações, que
manipulam esses dados, são agrupados em uma única estrutura: “as classes”.
Desde o início do desenvolvimento desses sistemas e, em todas as suas fases,
o analista trabalha com o mesmo elemento de abstração, os objetos.
Nos dias atuais, temos uma dependência generalizada em sistemas de
computação. O software é parte cada vez maior dos custos e do sucesso
desses sistemas, e a produção do software é uma atividade complexa, pois são
cada vez maiores e mais elaborados, exigindo métodos cada vez mais
disciplinados de desenvolvimento.
A indústria de software não consegue atender toda a demanda,
principalmente porque os programas precisam ter alta disponibilidade, alcance
global, estrutura escalar, alto desempenho, segurança e usabilidade.
Os negócios evoluem mais rápido que as soluções de TI. Como manter
um software atualizado com o menor custo de desenvolvimento? O mercado
muda constantemente, as tecnologias mudam inevitavelmente e a vontade e
objetivos dos usuários mudam imprevisivelmente!
Portanto, precisamos de um paradigma de programação capaz de
diminuir o tempo e o custo de mudanças e aumentar a capacidade de
adaptação e, por isso, os objetos são ótimos recursos para melhorar isso.
Classes
Uma classe é uma entidade que descreve um conjunto de objetos com
propriedades e comportamentos semelhantes e com relacionamentos comuns
com outros objetos. Consiste no modelo ou esquema a partir do qual os objetos
são criados.
As classes são as partes mais importantes de qualquer sistema
orientado a objetos, pois elas representam a modelagem do objeto do mundo
real no sistema computacional. Usamos as classes para capturar o vocabulário
do sistema que está em desenvolvimento.
-
4
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Figura 2 - Exemplo de classe (Pessoa)
Na Figura 2 mostramos um exemplo de representação de classes, que
se chama Diagrama de Classes. Esse diagrama provém do modelo UML
(Unified Modeling Language), que consiste em uma linguagem de modelagem
de sistemas OO. Além do Diagrama de Classes, a UML ainda possui o
Diagrama de Caso de Uso, Diagrama de Transição de Estados, Diagrama de
Atividades, Diagrama de Sequência, dentre outros. Para nossos estudos nessa
disciplina, usaremos apenas o Diagrama de Classes.
Toda classe é dividida em três partes sendo a primeira o nome da
classe, que deve ser no singular, pois representa um modelo. Em seguida,
temos os atributos que representam as características dos objetos e por fim
temos os métodos que representam as ações que os objetos podem executar.
Os objetos se comunicam através de mensagens que são executadas através
dos métodos.
No exemplo da Figura 2 temos uma classe chamada “Pessoa”. O
objetivo dessa classe é abstrair as principais características em comum de
pessoas do mundo real, nesse caso, usamos nome e idade como atributos.
Essa classe é um “molde” para a criação de qualquer pessoa, pois todas terão
a mesma característica. Temos 4 métodos no padrão set e get que veremos
com detalhes quando falarmos de encapsulamento. Veja outro exemplo na
Figura 3.
-
5
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Figura 3 - Exemplo de classe (Livro)
Na Figura 3 acima, vemos as três etapas de construção de uma classe.
Na primeira etapa temos o objeto do mundo real (livros). Esses objetos são
abstraídos e as principais características comuns são modeladas em uma
classe conforme etapa 2, onde temos como atributos isbn, titulo e autor. Além
dos atributos (dados) também criamos os métodos, que correspondem às
ações que podem ser executadas em cima dos dados. Na última etapa, de
implementação, escolhemos uma linguagem para implementar a classe, no
nosso exemplo escolhemos Java. No momento não é importante entender a
programação Java e sim as etapas de construção de uma classe.
Para dar outro exemplo, vamos ver como faríamos um modelo em um
esquema POO de uma fração, ou seja, essa estrutura matemática que tem um
numerador e um denominador que divide ao numerador, por exemplo, 3/2.
Podemos criar uma classe de nome “Fracao” que terá dois atributos, o
numerador e o denominador. Logo, poderia ter vários métodos como
simplificar, somar com outra fração ou número, subtrair com outra fração, etc.
Claro que um Diagrama de Classes UML geralmente não tem apenas
uma classe. Ele contempla várias classes do sistema e como elas trocam
mensagens, porém no momento vamos trabalhar com uma classe de cada vez.
-
6
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Objetos
Objetos são quaisquer coisas na natureza que possuam propriedades
(características) e comportamentos (operações). Veja alguns exemplos na
Figura 4 abaixo.
Figura 4 - Exemplo de objetos
O termo orientação a objetos significa organizar o mundo real como uma
coleção de objetos que incorporam estrutura de dados e um conjunto de
operações que manipulam estes dados.
Figura 5 - Exemplos de classes
Note na Figura 5 anterior que a classe possui sempre duas partes além
do nome, os atributos que representam as propriedades comuns dos objetos e
os métodos que representam os comportamentos comuns dos objetos.
Note que classe não tem vida, são apenas modelos conceituais.
Enquanto não criamos objetos baseados nessa classe, não existem dados,
apenas abstrações.
-
7
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Classe é uma especificação para um conjunto de objetos com
características semelhantes;
Uma classe representa um tipo de dados complexo;
Objetos são instâncias de uma classe (exemplos).
Figura 6 – Exemplos de Objetos
Para criar objetos devemos especificar a classe a partir da qual o objeto
será criado. Note na Figura 6 anterior que temos uma classe chamada “Casa” e
três instâncias dessa classe, ou seja, três objetos da classe Casa chamados
c1, c2 e c3 cada um contendo dados para seus atributos, gerando um “estado
do objeto”. O mesmo ocorre com a classe Livro que possui três objetos
instanciados, cada com um o seu “estado do objeto”.
Vimos na Figura 6 que para instanciar objetos usamos o operador “new”.
Veremos esse operador com mais detalhes quando partirmos para a
programação em si.
Todos os objetos, que são instâncias da mesma classe, compartilham
uma semelhança de família suportando o mesmo comportamento. O
comportamento de um objeto é definido pelos métodos que você pode chamar.
No exemplo da casa da Figura 6, o método abre Porta () pode ser usado por
-
8
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
qualquer objeto instanciado, porém somente o terceiro usou (ou invocou).
Para trabalhar com POO você precisa ser capaz de identificar três
características-chave dos objetos:
1. O comportamento do objeto – o que você pode fazer com esse objeto
ou quais métodos pode aplicar nele. Quando um objeto é
instanciado, todos os métodos da classe a que pertence podem ser
invocados pelo objeto.
2. O estado do objeto – conjunto de valores internos de um objeto.
Quando objetos são instanciados, uma área de memória é aberta
para cada objeto, sendo que os valores são armazenados
distintamente.
3. A identidade do objeto – como o objeto é diferenciado e identificado
entre outros objetos que possuem o mesmo comportamento e
estado. Os objetos podem ter exatamente o mesmo estado, ou seja,
seus atributos podem ter o mesmo valor, porém eles são
diferenciados pelo nome do objeto que foram criados.
Implementação de Classes e Objetos
Para exemplificar a criação de classes e objetos, vamos usar a
linguagem Java, mesmo porque a utilização em outras linguagens segue o
mesmo conceito e as diferenças são pequenas.
Figura 7 - Implementando uma classe
O modelo de uma classe pode ser implementado em um arquivo com o
mesmo nome da classe pública que contém. Cada arquivo JAVA só pode
conter uma classe pública.
-
9
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Existem alguns padrões para programação em Java, sendo que nomes
de classes e atributos são criados com identificadores que usam as seguintes
regras:
- somente letras, números e underline;
- não começam com número;
- não podem ter espaço em branco;
- não podem ser palavras reservadas da linguagem;
- não podem ter caracteres especiais como!, @, #, *, etc.
Para classes, as iniciais devem ser maiúsculas e para atributos todas as
letras devem ser minúsculas.
Em Java temos 8 tipos primitivos que podem ser usados como tipos de
atributos, sendo:
byte - 8 bits (inteiro)
short - 16 bits (inteiro)
int - 32 bits (inteiro)
long - 64 bits (inteiro)
float - ponto flutuante de 32 bits (real)
double - ponto flutuante de 64 bits (real)
char - Unicode de 16 bits (1 caractere)
boolean – true / false (lógico)
Além dos tipos primitivos, podemos usar tipos abstratos como tipos de
atributos. Em Java existem muitas classes prontas que podem ser utilizadas
como tipos para atributos, como por exemplo, a classe String para armazenar
texto. Na Figura 8 a seguir, a classe Aluno representada foi implementada em
Java.
Figura 8 – Classe Aluno
-
10
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Na Figura 8 mostramos um Diagrama de Classe com a classe Aluno que
foi implementada em Java. No exemplo, o arquivo gerado é Aluno.java.
Ao criar uma classe, ela passa a ser um tipo abstrato de dados que pode
instanciar objetos. Para instanciar objetos usamos o operador new.
Figura 9 – Instanciando objetos da classe Aluno
Note que na linha 1 estamos criando outro arquivo (TesteAluno.java) que
contem uma classe pública TesteAluno. No caso mais simples, para o
programa identificar que existe uma classe Aluno pronta (Aluno.java), os
arquivos devem estar na mesma pasta do sistema.
Na linha 2 criamos um método principal (main) que será executado
quando o programa for rodado. Nas linhas 5 e 6 instanciamos 2 objetos da
classe Aluno (maria e joao). Os 2 objetos criados possuem os atributos de
nome, idade e altura.
Nas linhas de 9 a 12 estamos criando o estado dos objetos. Podemos
acessar os atributos de um objeto através do seu nome e seu atributo
separados por um ponto.
Para confirmar que os dados foram atribuídos, nas linhas de 15 a 19
estamos imprimindo na tela os valores.
Para finalizar esta Unidade, vamos então ver outro exemplo de criação
de classes e instância de objetos.
-
11
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Figura 10 – Classe Carro
Na Figura 10 vemos uma classe de nome Carro, que deve estar em um
arquivo de nome Carro.java. Note que ainda não estamos usando os métodos
(ações), apenas os atributos.
Figura 11 – Instanciando objetos da classe Carro
Na Figura 11 vemos a criação de instâncias (objetos) da classe Carro.
-
12
Unid
ade
: In
troduçã
o à
PO
O (
Pro
gra
mação O
rienta
da
a O
bje
tos)
Referências SINTES, Tony. (2002) Aprenda Programação Orientada a Objetos em 21
dias. 1 ed. São Paulo: Pearson Education do Brasil, 2002, v. 1, p. 3-16
DEITEL, P.; DEITEL, H. (2010) Java Como Programar, 8 ed. São Paulo:
Pearson Education do Brasil, 2010, p. 57-58.
HORSTMANN, C.S.; CORNELL, G. (2010) Core Java. 8 ed. São Paulo:
Pearson Education do Brasil, 2010, v. 1, p. 51-53.
-
13
Responsável pelo Conteúdo:
Prof. Ms. Amilton Souza Martha
Lattes: http://lattes.cnpq.br/5455047756459479
Revisão Textual:
Profa. Ms. Rosemary Toffoli
www.cruzeirodosul.edu.br
Campus Liberdade
Rua Galvão Bueno, 868
01506-000
São Paulo SP Brasil
Tel: (55 11) 3385-3000