Escolar Documentos
Profissional Documentos
Cultura Documentos
1 INTRODUÇÃO
Nos anos 90, um grande número de empresas, de diversos portes, já estava com
boa parte de seus sistemas com um considerável nível de informatização, além
disso, o uso da internet como meio de comunicação e busca maciça de informação
foi amplamente divulgado e finalmente o computador passou a ser uma ferramenta
de trabalho para muitas pessoas.
Os softwares atuais se caracterizam por ter grande interação com o usuário, pelo
uso de interfaces gráficas, pela necessidade permanente de alteração e expansão
(dada a velocidade de mudanças de hardware) e apresentam interação com outros
sistemas possibilitando a troca de dados entres eles, portabilidade para diversas
plataforma e sistemas operacionais.
Assim o problema neste caso deixa de ser onde o sistema executar e passa a ser
como resolver o problema de maneira mais eficiente, ou seja, como representar o
problema do mundo real para o mundo computacional capturando todas as
características necessárias e que execute a melhor solução possível. E é quando
começa-se a falar em metodologias, tecnologias e técnicas de desenvolvimento de
software. O que está dominando atualmente o mercado é justamente a Orientação a
Objetos (OO).
Uma estrutura eficaz de objetos, uma vez criada, permitirá incluir módulos adicionais
no sistema que reutilizem as funcionalidades já desenvolvidas sem necessidade de
reprogramação.
Reutilizar não é duplicar código e alterar. Significa que o mesmo código pode ser
usado por sistemas diferentes, reduzindo o custo de desenvolvimento e o risco de
cometer erros de programação, ao mesmo tempo que não será necessário alterar
trechos, o que poderia introduzir novos erros no código.
Por exemplo, uma empresa desenvolve um sistema educacional que tenha sua
funcionalidade de cobrança baseada em objetos. A mesma empresa pode
desenvolver um sistema imobiliário e reutilizar objetos de cobrança , incluindo-os no
novo sistema. Se o autor do sistema educacional fizer aperfeiçoamentos ou
correções nos objetos de cobrança, essas alterações terão sido realizadas de uma
vez em todos os sistemas da empresa.
Programação Algorítmica
Programação OO
(Procedimental)
Metodologia desenvolvida
Ênfase: construção de algoritmos;
objetivando suprir deficiências
Utiliza abordagem de
encontradas em programação
refinamentos sucessivos;
algorítmica;
Subproblemas são codificados
Encapsulamento: combinação de
como unidades denominadas
dados (atributos) e funções
procedimentos, subrotinas ou
(métodos) numa única entidade
funções;
de programa;
Unidades de programa podem ser
Objeto: entidade de
agrupadas em módulos;
encapsulamento;
Programa resultante consiste de
Um programa no paradigma OO
uma coleção de unidades que se
consiste de vários objetos que se
comunicam entre si;
comunicam (isto é, trocam
Visão Top-down;
mensagens) utilizando seus
Forte uso de Decomposição
métodos constituintes;
Funcional;
Visão de Objetos cooperativos;
O sistema é composto por dados
As características de
e funções, tratados
comportamento e informações
separadamente, mas que podem
são modeladas de maneira
interagir.
fortemente relacionadas;
2.1 OBJETO
Como exemplos de objetos, podemos citar os objetos físicos (um livro, uma
mercadoria), funções de pessoas para os sistemas (cliente, vendedor), eventos
(uma compra, um telefonema), interações entre outros objetos (um item de uma nota
fiscal é uma interação entre uma compra e um produto do estoque) e lugares (loja
matriz, revenda norte).
Figura 2 - Cachorro.
Analisando este objeto, o cachorro, podemos deduzir que o mesmo possui algumas
características que pertencem apenas a ele próprio. Por exemplo, um cachorro
possui:
Um nome,
Uma idade,
Um comprimento de pelos,
Uma cor dos pelos,
Uma cor dos olhos,
Um peso,
...
Latir;
Babar;
Correr em círculos,
Pegar a bola,
Sentar,
Comer,
Dormir,
...
A única maneira de interagir com os objetos é através dos métodos que ele
disponibiliza. Para interagir com o cachorro, utilizamos os métodos que
relacionamos acima: para alimentá-lo, utilizamos o método “comer”, para brincar
com ele, utilizamos o método “pegar a bola”, etc.
2.1.1 ATRIBUTO
2.1.2 MÉTODO
O modificador de visibilidade pode estar presente tanto para atributos como para
métodos. Em princípio, três categorias de visibilidade podem ser definidas:
2.1.4.1 ESPECÍFICOS
Em vez de criar um método que constrói uma casa, crie um método que cria um
quarto, outro método que cria a sala, outro que cria o banheiro, um método pra
organizar a casa etc.
Assim, quando tiver que criar um banheiro, já terá o método específico para aquilo.
2.1.4.2 CONSTRUTORES
O (pseudo-) método construtor determina que ações devem ser executadas quando
da criação de um objeto. Em Java, o construtor é definido como um método cujo
nome deve ser o mesmo nome da classe e sem indicação do tipo de retorno -- nem
mesmo void. O construtor é unicamente invocado no momento da criação do objeto
através do operador new.
Toda classe tem pelo menos um construtor sempre definido. Se nenhum construtor
for explicitamente definido pelo programador da classe, um construtor padrão, que
não recebe argumentos, é incluído para a classe pelo compilador Java. No entanto,
se o programador da classe criar pelo menos um método construtor, o construtor
padrão não será criado automaticamente -- se o programador desejar mantê-lo,
deverá criar um construtor sem argumentos explicitamente.
Seguir essa sequência é uma necessidade de forma a garantir que, quando o corpo
de um construtor esteja sendo executado, o objeto já terá à disposição as
funcionalidades mínimas necessárias, quais sejam aquelas definidas por seus
ancestrais. O primeiro passo garante que nenhum campo do objeto terá um valor
arbitrário, que possa tornar erros de não inicialização difíceis de detectar.
Toda vez que um membro tem modificador de acesso public, ele é considerado uma
interface, pois interage com o meio externo ao objeto. Toda vez que um membro tem
modificador de acesso private ele é considerado encapsulado pois não existe
interação externa.
Uma vez que os atributos são privados, precisamos de mecanismos para modificar
(set) e acessar seu conteúdo (get).
Permite que uma classe seja executada (normalmente pelo menos uma das classes
da aplicação precisa ser executada). Quando uma aplicação Java é iniciada, a JVM
localiza e chama o método main() que recebe por parâmetro um vetor de objetos
String representando os parâmetros de linha de comando.
Exemplo de aplicação:
public class Aplicacao {
Hora horaDoAlmoco;
horaDoAlmoco.setHorario(12,30,00);
horaAtual.setHoraAtual();
2.2 CLASSE
Todo objeto pertence a uma classe, ou seja, é instância de uma classe. De fato, a
orientação a objetos norteia o processo de desenvolvimento através da classificação
de objetos, isto é, objetos são agrupados em classes, em função de exibirem facetas
similares, sem, no entanto, perda de sua individualidade. Assim, a modelagem
orientada a objetos consiste, basicamente, na definição de classes. O
comportamento e a estrutura de informação de uma instância são definidos pela sua
classe.
Enquanto um objeto individual é uma entidade real, que executa algum papel no
sistema como um todo, uma classe captura a estrutura e comportamento comum a
todos os objetos que ela descreve. Assim, uma classe serve como uma espécie de
contrato que deve ser estabelecido entre uma abstração e todos os seus clientes.
Olhando os dois cães do exemplo anterior, vemos que os dois possuem exatamente
o mesmo conjunto de atributos. Isso acontece porque se trata de dois objetos da
mesma classe, ou categoria. Isso significa que os dois possuem exatamente o
mesmo conjunto de atributos e métodos, embora cada objeto possa ter valores
diferentes para os seus atributos.
Figura 5 - Classe Cães.
Objetos de mesma classe possuem a mesma definição tanto para métodos quanto
para atributos.
Tomemos uma classe gatos formada de objetos “gato”. Estes objetos possuem as
seguintes características: nome, idade, peso, cor de pelos, cor de olhos e
comprimento de pelos. Além disso, o objeto possui as seguintes ações: miar, comer,
dormir, subir na árvore.
O operador new:
Os métodos são acessados através do operador “.” (ponto), precedido pelo nome do
objeto (variável) e seguido do nome do método. Exemplo:
Hora horaDoAlmoco;
horaDoAlmoco.setHorario(12,30,00);
horaAtual.setHoraAtual();
Valor default para inicialização de atributos de tipos não primitivo, indicando que
determinado atributo/variável de referência não se refere a nenhum objeto.
Exemplo:
setHorario(h, m, s);
public Hora(int h) {
setHorario(h, 0, 0);
this.hora = hora;
this.minuto = minuto;
this.segundo = segundo;
ambiguidade de nomes
(parâmetros x atributos) */
É também conhecida por variável estática (static), sendo uma variável comum a
todas as instâncias da classe.
setHorario(h, m, s);
public Hora(int h) {
setHorario(h, 0, 0);
static {
fusoHorario = - 3;
/*
*/
Não necessitam de uma instância da classe para que sejam invocados, sendo
definidos com o uso da palavra reservada static.
/*
Método de classe
*/
int diferenca;
...
return diferenca;
não é permitido */
O modificador final indica que o atributo não poderá sofrer alteração em seu valor,
sendo que este atributo:
Uma das principais formas do ser humano lidar com a complexidade é através do
uso de abstrações. As pessoas tipicamente tentam compreender o mundo,
construindo modelos mentais de partes dele. Tais modelos são uma visão
simplificada de algo, onde apenas elementos relevantes são considerados. Modelos
mentais, portanto, são mais simples do que os complexos sistemas que eles
modelam.
Da mesma forma que um mapa precisa ser significativamente menor que o território
que mapeia, incluindo apenas informações cuidadosamente selecionadas, um
modelo mental abstrai apenas as características relevantes de um sistema para seu
entendimento. Assim, podemos definir abstração como sendo o princípio de ignorar
aspectos não relevantes de um assunto, segundo a perspectiva de um observador,
tornando possível uma concentração maior nos aspectos principais do mesmo. De
fato, a abstração consiste na seleção que um observador faz de alguns aspectos de
um assunto, em detrimento de outros que não demonstram ser relevantes para o
propósito em questão, isto é, a abstração é aplicada de acordo com o interesse do
observador, e por isso de um mesmo objeto pode-se ter diferentes visões, como
demonstra a figura 7 abaixo.
Só devem ser mapeados os objetos que são relevantes ao problema, bem como as
características (propriedades e comportamento) desses objetos que forem
necessários.
Figura 7 - A abstração enfoca as características essenciais de um objeto.
Note que a classe abstrata Produto, circulada em vermelho, é a base para toda
classe que for um produto, ou seja, não importa se o produto concreto é um livro,
mochila, caderno, enfim a questão é que todas as classes serão herdeiras da classe
Produto. Dentro de sua arquitetura, a classe que for servir de base para representar
um item do mundo real, tem que conter os principais conceitos do que se deseja
abstrair. Em nosso exemplo, estamos querendo abstrair, um Produto qualquer do
mundo real, e note no diagrama mostrado anteriormente, que tenho as principais
informações na classe Produto, e toda e qualquer particularidade, passa a ser da
responsabilidade da classe concreta implementar estes detalhes; vemos no exemplo
a classe livro tendo atributos como ISBN e autor, e a classe mochila tendo os
atributos cor e marca. Mais o conceito principal e comum, a todo e qualquer Produto,
seja ele um Livro ou uma mochila, estão centralizados na abstração, ou seja, na
classe Produto.
Note que a classe ItemPedido não faz referência a classe concreta Livro ou Mochila,
ela faz referência a classe abstrata Produto; isto faz com que, qualquer alteração
nas classes concretas não irão afetar em nada a classe ItemPedido. Esta forma de
design faz com que tenhamos um baixo acoplamento e tenhamos dependências
mais leves, o que torna a manutenção mais fácil e a evolução também.
4 ENCAPSULAMENTO
No mundo real, um objeto pode interagir com outro sem conhecer seu
funcionamento interno. Uma pessoa, por exemplo, geralmente utiliza uma televisão
sem saber efetivamente qual a sua estrutura interna ou como seus mecanismos
internos são ativados. Para utilizá-la, basta saber realizar algumas operações
básicas, tais como ligar/desligar a TV, mudar de um canal para outro, regular
volume, cor, etc. Como estas operações produzem seus resultados, mostrando um
programa na tela, não interessa ao telespectador.
Os usuários tem conhecimento apenas das operações que podem ser realizadas e
precisam estar cientes apenas do QUE as operações fazem, e não COMO elas
estão implementadas.
Por exemplo, para usar um carro, uma pessoa não precisa conhecer sua estrutura
interna (motor, caixa de marcha, etc...), nem tampouco como se dá a implementação
de seus métodos. Sabe-se que é necessário ligar o carro, mas não é preciso saber
como esta operação é implementada.