programação orientada a objetos
DESCRIPTION
Relatório sobre Programação Orientada a Objetos (POO) para a matéria Seminários do Curso de Eng. Elétrica da UFES. Tem uma apresentação baseada nele. A POO tem outras características interessantes, então pesquise mais ^^TRANSCRIPT
PROGRAMAÇÃO ORIENTADA A OBJETOS: INTRODUÇÃO E CONCEITOS.
Janaina Scal Duia Castello
Programação Orientada a Objetos
Disciplina Seminário Departamento de Engenharia Elétrica – Universidade Federal do Espírito Santo
Vitória – ES – BRASIL [email protected]
Resumo – Neste artigo descreve
alguns conceitos de programação a fim de
que se possa definir o que é Programação
Orientada a Objetos. Também se discute
vantagens deste tipo de programação em
comparação com o tipo mais usado na
indústria de software, bem como os
motivos e a historia de seu surgimento.
Além disso, espera-se que pessoas com
pouco conhecimento em programação
consigam compreender este conceito e
possam iniciar um estudo mais
aprofundado futuramente.
I – INTRODUÇÃO
Nos últimos anos, a indústria do
software vem investindo numa nova
filosofia de programação, a Programação
Orientada a Objeto. Este filosofia consiste
em aproximar a metodologia de programa-
ção da metodologia do raciocínio humano,
ou seja, na discrição do mundo por
conjunto de objetos, os quais possuem seus
componentes e suas ações bem definidas.
No capitulo II será descritos alguns
conceitos básicos para facilitar a com-
preensão do texto. A seguir, o capitulo III,
mostram a evolução das linguagens de
programação até a Programação Orientada
a Objeto, bem como principais motivos
destas mudanças. O capitulo IV conceitua
o que significa Programar Orientado a
objetos e descreve as principais carac-
terísticas deste tipo de programação. Por
fim, o capitulo V discorre sobre as vanta-
gens e desvantagens desta metodologia e
comenta as conclusões sobre tal.
II – CONCEITOS BÁSICOS
1. Paradigmas de Linguagens de
Programação
“É um conjunto de características
que servem para caracterizar um conjunto
de linguagens” [1].
De um modo mais simplificado, os
paradigmas indicam a forma como o
programador visualiza como o programa
será escrito e executado. Por exemplo, ele
pode considerar como uma serie de
comandos executados em sequência
(Estruturação) ou como objetos que
interagem entre si (orientação a objetos).
2. Programação Estruturada
“É uma forma de programação de
computadores que preconiza que todos os
programas possíveis podem ser reduzidos
a apenas três estruturas: sequência,
decisão e interação” [2].
Este orienta os programadores para
a criação de estruturas simples em seus
programas, usando as sub-rotinas e
funções. Além de incentivar os comen-
tários (trecos de texto que não são
executáveis) para facilitar a compreensão
do programa, seja para ajudar a relembrar
o programador, seja para que outros
programadores possam entendê-lo.
3. Modularização
É a idéia de dividir um programa
em etapas a fim facilitar o entendimento do
programa. Além disso, também se pode
escrever um trecho de código uma única
vez e utilizá-lo repetidas vezes no código,
apenas chamando-o (escrevendo o nome
especificado no módulo).
4. Abstração de Dados
É o conceito de separar a
manipulação dos dados (programa) de
como os dados e as funções de
manipulação destes são implementadas.
Simplificando, é o mesmo que manipular
dados através de uma biblioteca.
5. Orientação a Objetos
É o conceito de programar de uma
forma mais parecida de como os humanos
compreendem o mundo e utilizando a
abstração de dados. A idéia é representar
os dados como um conjunto de atributos,
por exemplo: representa uma pessoa como
um nome, uma idade, uma nacionalidade,
etc.
III – HISTORIA
A máquina analítica criada por
Charles Babbage, em 1837, é considerado
o projeto do primeiro computador de uso
geral. Ela não chegou a ser construída,
apesar de se acreditar que seja um projeto
viável para época. Neste mesmo projeto já
existia uma programadora, Ada Lovelace,
que escreveu um algoritmo capaz de
computar valores de uma função
matemática. Contudo este projeto não
chegou a ser construído, e o primeiro
computador de uso geral só foi criado 100
anos mais tarde. [3]
Os primeiros programas tinham de
ser escritos em linguagem de máquina e
exigiam que os programadores conhe-
cessem a arquitetura, entre outras informa-
ções, da máquina que iriam programar.
Para facilitar a programação foram criadas
as Linguagens de Programação (LP), um
conjunto de instrução que a maquina deve
seguir. As LP abstraem os códigos da
linguagem de maquina para códigos mais
compreensivos para o homem.
As primeiras LP foram
desenvolvidas com o intuito de maximizar
a eficiência computacional das maquina,
pois seus recursos, como a memória e o
processador, eram escassos. Nesse contex-
to surgiu a linguagem FORTRAN (For-
mula Translator). [1]
Apesar dos computadores terem se
desenvolvido com o passar dos anos, a
programação ainda era um ato demorado, o
que atrapalhava o mercado de compu-
tadores, uma fez que ainda era muito
trabalhoso escrever programas. Por este
motivo, nos anos 60, o enfoque das LP
passou a ser a melhoria da eficiência dos
programadores, então elas passaram a usar
o paradigma Estruturado. Pascal e C são
linguagens desta geração.
Com o aumento da complexidade
computacional tornou-se difícil compre-
ender um código único. Daí apareceu o
conceito de abstração de dados, e com o de
modularização, o de bibliotecas. As biblio-
tecas permitem que se escrevam as funções
em arquivos separados e apenas utilize a
função, sem ter que escrevê-la no código.
A modularização subdivide o código em
módulos (blocos de códigos) o que facilita
a visualização do mesmo. ADA (em
homenagem a Ada Lovelace) e MODULA-
2 agregam esses conceitos. [1]
Nos anos 80 e 90 os computadores
pessoais passaram a ser um bem de
consumo, desenvolvendo da indústria de
software. Isso demandou programas
melhores em um período de desen-
volvimento menor. Para isso surgiu o
conceito de reutilização de códigos e as
linguagens baseadas em orientação a
objetos. O SMALTALK foi a primeira LP
totalmente orientada a objetos. JAVA e
C++ também utilizam. [1]
IV – PROGRAMAÇÃO ORIENTADA
A OBJETOS.
Programação Orientada a Objetos
(POO) visa descrever o mundo real
baseado na forma que os humanos a
compreendem: como objetos com atributos
e atitudes. Por exemplo, podemos definir
um cachorro descrevendo-o através dos
atributos: cor do pêlo, idade, brinquedo
favorito, nome, dono, etc.; e das atitudes:
morder, lamber, andar, brincar, e etc.
Baseado nisso o POO evita um dos
problemas da forma tradicional de
programação (estruturada): a não
reutilização de códigos. Muitas vezes
deseja-se reutilizar pedaços de outro
programa, porém isso acarretaria em
mudanças substancias no código original
que na pratica mais dificultam que ajudam.
Como na POO a funções que
manipulam os dados (atitudes) são
definidas na descrição dos mesmos, a
reutilização do mesmo não é um problema.
Ou seja, a POO tem um melhor
desempenho nos desenvolvimento de
programas e um menor custo de
manutenção. Esta ultima vantagem deve-se
ao fato de que caso seja necessário uma
mudança no código ela será local, só na
definição da função no objeto, e se
propagará por todo o código.
A implementação da POO baseia-se
nos conceitos: Classe (e subclasse),
herança, polimorfismo e encapsulamento.
1. Classe
Estrutura modular que descreve um
conjunto de dados estruturados e as fun-
ções capazes de manipulá-los. É carac-
terizada por nome, superclasse, variáveis
internas e métodos (funções associadas).
Por exemplo, a classe resistor pertence à
superclasse ElementoPassivo, possui a
variável resistência e potência máxima, e
possui o método paralelo, que calcula o
valor de dois resistores ligados em
paralelo.
Os objetos são instancias de
classes, ou seja, é um elemento que
pertence a uma classe. Só um objeto de
uma classe pode acessar os métodos dessa
mesma classe. Por exemplo, R80P1 é o
objeto cuja resistência é 80 ohms e agüenta
no máximo 1W, é uma instancia de
resistor, enquanto L120mH1W é um objeto
da classe indutor, o qual não consegue
acessar o método paralelo da classe
resistor.
Os métodos são declarados dentro
das classes. Por isso a reutilização de
códigos é tão disseminada na POO. Um
programa que utiliza uma classe
automaticamente pode reutilizar todos os
seus métodos.
Ao se chamar um método de um
objeto diz-se que se esta passando uma
mensagem ao objeto. Por exemplo, ao
escrever “R80P1.paralelo(„parâmetros‟)”
esta se passando a mensagem paralelo ao
objeto R80P1.
2. Polimorfismo
“Polimorfismo é a propriedade de
uma ou mais classes responderem a
mesma mensagem cada uma de uma forma
diferente” [4].
Essa propriedade é uma
característica da Linguagem, ou seja, se a
linguagem não a possuir o programador
não consegue sintetizá-la.
Ela permite que várias classes
possuam as mesmas características, atri-
butos e métodos, de outras classes. Além
disso, também permite a flexibilidade
dessas características serem idênticas ou
serem redefinidas. Ou seja, duas classes
podem possuir o mesmo método (e estes
realizarem comandos diferentes) e os
mesmos atributos com tipos diferentes (um
inteiro e outro carácter). A LP consegue
definir qual das funções será executada
através do tipo de objeto que recebe as
mensagens, sendo essa decisão é tomada
em tempo de execução. Isto quer dizer que
o programa só sabe qual função será
chamada no momento em que for chamá-
la.
3. Encapsulamento
“A capacidade de ocultar dados
dentro de modelos, permitindo que
somente operações especializadas ou
dedicadas manipulem estes dados ocultos
chama-se encapsulamento” [5]
Modelos são representações
simplificadas de itens, pessoas, processos,
conceitos, etc. Ou seja, modelos são os
objetos da POO e encapsulamento a
filosofia de proteger os atributos do objeto
de uma determinada classe ao garantir que
apenas os métodos dessa classe possam
manipulá-los.
Faz-se necessário explicar o
conceito de métodos privados e públicos.
Um método privado é uma função em que
apenas os objetos da classe podem acessá-
los, enquanto que outras classes não. No
mesmo conceito, um método público
qualquer classe tem acesso.
Caso os atributos de uma classe
sejam declarados como privados, eles só
poderão ser modificados pelo próprio
objeto através de seus métodos. Caso
contrário, qualquer objeto terá acesso a
este, o que pode causar uma série de erros
se o programador não tomar muito
cuidado. Com os atributos privados
evitam-se erros, protegendo o estado do
objeto, isto é, os seus dados.
A filosofia do encapsulamento
também consiste na abstração de como os
métodos são implementados nas classes, de
forma que para passar uma mensagem a
um objeto não é necessário saber como ela
será executada, apenas qual é o seu tipo de
resposta. Por exemplo, se falar consiste em
escrever na tela uma string, então não é
necessário saber se o método escreve letra
por letra ou toda a mensagem de uma vez,
apenas que irá aparecer uma mensagem na
tela. Isto permite que se consiga pensar no
programa principal de uma forma mais
abstrata, alto nível.
Com as abstrações dos métodos,
eles passam a funcionar como uma caixa
preta, o que significa que é possível
modificar a sua implementação sem afetar
o programa principal, desde que a forma de
chamar e o tipo de resposta seja mantido.
Isto permite que a manutenção do sistema
seja mais simplificada, afinal caso se
descubra um erro em um método, ou se
decida que é melhor implementá-lo de
forma diferente, não será necessário
modificar todas as suas chamadas ou o
programa principal, só a descrição do
método na classe.
4. Herança
“Herança é a propriedade dos
objetos que permite a criação de uma
hierarquia entre eles, onde os descen-
dentes herdam o acesso ao código e estru-
turas de dados dos seus ancestrais.” [4]
Toda classe pode ter subclasses
associadas as quais herdam suas
características, assim como um filho herda
as características de seus pais, a cor do
olho por exemplo. Se uma classe não
possuir todas as características de outra
classe, essa nova classe não é uma
subclasse da classe original.
Devido ao conceito de
polimorfismo e de hierarquia, é possível
redefinir (mas não excluir) os métodos
herdados nas subclasses sem afetar os
métodos das superclasses. Por exemplo,
defini-se a classe primata e sua subclasse
humano. Ambas possuem o método fala,
porém redefini-se na subclasse humano. A
classe humano e suas subclasses (ex.:
homem e mulher) irão executar a função
descrita na classe humano, enquanto a
classes primata, e suas outras subclasses
(ex.: chimpanzé), irão executar a descrita
em primata.
Necessita-se lembrar que apenas os
métodos públicos são herdados enquanto
os métodos privados são exclusivos da
classe que os possui.
V – APLICAÇÕES
A Programação Orientada a
Objetos aplica-se ao desenvolvimento de
qualquer tipo de software. Como qualquer
paradigma de programação, a população
não compreende que está utilizando, mas
quase todos os aplicativos de internet já
utilizam este artifício.
Quem utilizaria diretamente são os
programadores de software e os
gerenciadores de Banco de Dados.
Contudo, as Linguagens de Programação
são, na sua maioria, softwares livres, então
qualquer pessoa está apta a utilizar os
conceitos de POO.
VI – CONCLUSÕES
Como discutido durante o artigo, a
POO foca em resolver as duas maiores
preocupações da indústria de softwares
atualmente: a reusabilidade dos códigos e a
manutenção dos softwares. Com a
abstração, possibilita que várias pessoas
possam trabalhar no mesmo sistema e
facilita o gerenciamento do projeto, uma
vez que é mais bem definida qual a função
de cada departamento. Ela também
proporciona uma metodologia de
programação mais próxima de como os
seres humanos pensam, além de reduzir os
erros por mudança indesejada dos dados.
Em contrapartida a POO nunca será
tão eficiente quanto à execução do
programa. Mas no quadro em que a
computação se encontra, com
processadores de alto desempenho e
memória que chegam a 1TB (um terabyte),
e considerando que a diferença de
desempenho não é tão alarmante e nem
proporcional a complexidade do programa,
esta desvantagem não é preocupante.
Outra desvantagem seria a
complexidade maior em aprender a POO
em relação aos paradigmas procedurais.
Mas, novamente, isto não é preocupante,
uma vez que ainda necessita-se programar
proceduralmente para descrever alguns dos
métodos básicos. Logicamente o pré-
requisito da POO é a programação
procedural, afinal é a forma como a
máquina executa os programas. Então o
código final da POO será um código
procedural, o que significa que em algum
momento houve uma conversão do
“método de programação”.
VII – REFERENCIAS
[1] VAREJÃO, Flávio M. Linguagens de
Programação: Conceitos e Técnicas.
Editora Campus. Disponível em:
<www.inf.ufes.br/~fvarejao/livroLP.html>.
Acesso em: 19 set. 2011.
[2] JACKSON, Michael A. Principles of
Program Design. Academic Press,
London, 1975.
[3] MENABREA, L. F. Sketch of The
Analytical Engine Invented by Charles
Babbage. Fourmilab Switzerland.
Disponível em:
<http://www.fourmilab.ch/babbage/sketch.
html>. Acessado em: 19 set. 2011.
[4] Programação Orientada a Objetos.
Jackson Laskoski, Jack.eti.br. Disponível
em:
<http://www.jack.eti.br/www/arquivos/apo
stilas/java/poo.pdf>. Acessado em: 19 set.
2011.
[5] Santos, R., Introdução à Programação
Oriendada a Objetos Usando Java.Rio de
Janeiro: Campus, 2003.