Você está na página 1de 41

POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- BREVE RELATO: PROGRAMAÇÃO ORIENTADA A OBJETOS


O termo Programação Orientada a Objetos foi criado por Alan
Kay, autor da linguagem de programação Smalltalk. Mas mesmo
antes da criação do Smalltalk, algumas das ideias da POO já eram
aplicadas, sendo que a primeira linguagem a realmente utilizar
estas idéias foi a linguagem Simula 67, criada por Ole Johan Dahl
e Kristen Nygaard em 1967. Note que este paradigma de
programação já é bastante antigo, mas só agora vem sendo
aceito realmente nas grandes empresas de desenvolvimento de
Software. Alguns exemplos de linguagens modernas utilizadas
por grandes empresas em todo o mundo que adotaram essas
idéias: Java, C#, C++, Object Pascal (Delphi), Ruby, Python, Lisp,
...
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A maioria delas adota as idéias parcialmente, dando espaço para


o antigo modelo procedural de programação, como acontece no
C++ por exemplo, onde temos a possibilidade de usar POO, mas
a linguagem não força o programador a adotar este paradigma
de programação, sendo ainda possível programar da forma
procedural tradicional. Este tipo de linguagem segue a idéia de
utilizar uma linguagem previamente existente como base e
adicionar novas funcionalidades a ela.
Outras são mais "puras", sendo construídas do zero focando-se
sempre nas idéias por trás da orientação a objetos como é o caso
das linguagens Smalltalk, Self e IO, onde TUDO é orientado a
objetos.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

* SMALLTALK: é uma linguagem de programação Orientada a


Objetos criada na década de 70 pelo Centro de Pesquisa de Palo
Alto da Xerox (lugar onde, entre outras coisas, nasceram a
Ethernet e a GUI). Ela é totalmente baseada no conceito de
orientação a objetos.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

* O termo Programação procedural (ou programação


procedimental) é às vezes utilizado como sinônimo de
Programação imperativa (Paradigma de programação que
especifica os passos que um programa deve seguir para alcançar
um estado desejado), mas pode se referir (como neste artigo) a
um paradigma de programação baseado no conceito de
chamadas a procedimento (en: procedure call). Os
Procedimentos, também conhecidos como rotinas, subrotinas,
métodos, ou funções, simplesmente contêm um conjunto de
passos computacionais a serem executados.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PROGRAMAÇÃO ORIENTADA A OBJETOS (POO)


Trata-se de um paradigma de programação relativamente
recente, que se baseia fundamentalmente no conceito de
Objetos. É uma forma de desenvolvimento de sistemas de
software que o trata como um conjunto de componentes que
interagem entre si para resolver um problema. Esses
componentes são denominados Objetos. Os objetos são os
“blocos de construção” de software na OO.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PROGRAMAÇÃO ESTRUTURADA X ORIENTADA A OBJETOS


A imagem mostra uma comparação entre a programação
estruturada e a programação orientada a objetos no que diz
respeito aos dados. Repare que, no paradigma estruturado,
temos procedimentos (ou funções) que são aplicados
globalmente em nossa aplicação. No caso da orientação a
objetos, temos métodos que são aplicados aos dados de cada
objeto. Essencialmente, os procedimentos e métodos são iguais,
sendo diferenciados apenas pelo seu escopo.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PROGRAMAÇÃO ESTRUTURADA X ORIENTADA A OBJETOS


POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A linguagem C é a principal representante da programação


estruturada. Se trata de uma linguagem considerada de baixo
nível e sua principal utilização, é em programação para sistemas
embarcados (específicos, uma única utilização) ou outros em que
o conhecimento do hardware se faz necessário para um bom
programa.
Um detalhe importante: a programação estruturada, quando
bem feita, possui um desempenho superior ao que vemos na
programação orientada a objetos. Isso ocorre pelo fato de ser
um paradigma sequencial, em que cada linha de código é
executada após a outra, sem muitos desvios, como vemos
na POO. Além disso, o paradigma estruturado costuma permitir
mais liberdades com o hardware, o que acaba auxiliando na
questão desempenho.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Já a programação orientada a objetos traz pontos que são mais


interessantes no contexto de aplicações modernas. Como o
desempenho das aplicações não é uma das grandes
preocupações na maioria delas (devido ao poder de
processamento dos computadores atuais), a programação
orientada a objetos é muito difundida e um dos destaques
principais, é a reutilização de código e a capacidade de
representação do sistema muito mais perto do que veríamos no
mundo real.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- IDÉIAS BÁSICAS DA POO


A POO foi criada para tentar aproximar o mundo real do mundo
virtual: a idéia fundamental é tentar simular o mundo real
dentro do computador. Para isso, nada mais natural do que
utilizar Objetos, afinal, nosso mundo é composto de objetos,
certo?!
Na POO o programador é responsável por moldar o mundo dos
objetos, e explicar para estes objetos como eles devem interagir
entre si. Os objetos "conversam" uns com os outros através
do envio de mensagens, e o papel principal do programador é
especificar quais serão as mensagens que cada objeto pode
receber, e também qual a ação que aquele objeto deve realizar
ao receber aquela mensagem em específico.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Uma mensagem é um pequeno texto que os objetos


conseguem entender e, por questões técnicas, não pode conter
espaços. Junto com algumas dessas mensagens ainda é possível
passar algumas informações para o objeto (parâmetros), dessa
forma, dois objetos conseguem trocar informações entre si
facilmente.
Exemplo prático: imagine que você está desenvolvendo um
software para uma locadora e esta locadora tem diversos
clientes. Como estamos tentando modelar um sistema baseado
no sistema real, nada mais obvio do que existirem objetos do
tipo Clientes dentro do nosso programa, e esses Clientes dentro
do nosso programa nada mais serão do que objetos que
"simulam" as características e ações no mundo virtual que um
cliente pode realizar no mundo real.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- OBJETO:
Trata-se de uma ocorrência específica de uma classe; é uma
“instância de classe”. Os objetos são a base da OO (Orientação a
Objetos). Os objetos representam entidades do mundo real,
como aviões, pessoas, contas correntes, etc., mas também
podem representar outros conceitos, como gráficos (círculos,
quadrados, cones, esferas, etc.) Um objeto possui características
próprias (atributos) e executa determinadas ações (métodos),
sendo esses atributos e métodos provenientes da classe que
origina o objeto.
- Abstração: Abstrair significa selecionar aspectos específicos de
um problema a ser analisado, deixando de lado outros aspectos.
É a representação de uma entidade do mundo real na forma de
idéias. As entidades abstraídas podem se comunicar entre si, por
meio da troca de Mensagens.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- MENSAGENS:
Os objetos se comunicam a partir da troca de mensagens. Uma
mensagem é um sinal enviado de um objeto a outro, o qual
requisita um serviço, usando uma operação programada no
objeto chamado. Por exemplo, para que um objeto execute um
método, é necessário enviar a este objeto uma mensagem
solicitando a execução do método desejado. As mensagens
somente ocorrem entre objetos que possuem uma Associação.
As mensagens também são programadas. Quando uma
mensagem é recebida, uma operação é invocada no objeto
chamado. Há vários formatos de mensagens: procedures (subs e
functions), passagem de sinais entre threads, acionamento de
eventos, etc.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- CLASSES
Uma Classe é uma coleção de objetos que são descritos com os
mesmos atributos e as mesmas operações. Uma classe
representa uma idéia ou conceito e classifica objetos que
tenham propriedades similares. As classes representam os
blocos de construção mais importantes dos sistemas
orientados a objetos, e devem possuir responsabilidades bem
definidas dentro da aplicação. Uma classe é como se fosse um
tipo abstrato de dados, um “molde” para a criação de objetos.
Um objeto é, portanto, um “Instância de uma Classe” As classes
possuem atributos e métodos. Atributos são características da
classe, que são comuns a todos os objetos derivados, e que
podem apresentar valores diversos. Já os Métodos são as
operações possíveis em uma classe (nos objetos instanciados a
partir dela).
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- CLASSES
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- AFINAL: O QUE É UMA CLASSE, ATRIBUTO E MÉTODO? E PRA


QUE SERVE O CONSTRUTOR?
Uma classe é uma abstração que define um tipo de objeto e o
que este tipo de objetos tem dentro deles (seus atributos) e
também define que tipo de ações esse tipo de objeto é capaz de
realizar (métodos).
É normal não entender isso logo de cara, mas os conceitos de
classes e subclasses são relativamente simples: Tente pensar no
conceito de Classes utilizado na Biologia: um animal é uma
classe, e tem suas características: é um capaz de pensar, precisa
se alimentar para viver, etc, etc. O Ser Humano é uma sub-
classe dos animais. Ele tem todas as características de um
animal, mas também tem algumas peculiaridades suas, não
encontradas nas outras sub-classes de animais. Os pássaros
também são animais, mas possuem características próprias.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Observe que uma Classe não tem vida, é só um conceito. Mas


os Objetos (animais, serem humanos, pássaros, etc) possuem
vida. O seu cachorro rex é um Objeto (ou instância) da classe
Cachorro. A classe Cachorro não pode latir, não pode fazer xixi
no poste, ela apenas especifica e define o que é um cachorro.
Mas Objetos do tipo Cachorro, estes sim podem latir, enterrar
ossos, ter um nome próprio, etc.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A criação de uma nova Classe é dividida em duas partes: os


seus atributos e os seus métodos. Os atributos são variáveis
que estarão dentro de cada um dos objetos desta classe, e
podem ser de qualquer tipo. Por exemplo, a classe Cachorro
poderá ter o atributo nome que será do tipo String. Assim,
cada Objeto desta classe terá uma variável própria chamada
nome, que poderá ter um valor qualquer (Rex, Frodo, Atila, ...).
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

MÉTODOS serão as ações que a Classe poderá realizar. Quando


um objeto desta classe receber uma mensagem de algum outro
objeto contendo o nome de um método, a ação correspondente
a este método será executada. Por exemplo, caso um objeto da
classe Dono envie uma mensagem para um objeto do tipo
Cachorro falando "sente", o cachorro irá interpretar esta
mensagem e consequentemente irá executar todas as instruções
que foram especificadas na classe Cachorro dentro do
método sente.
Um construtor tem uma função especial: ele serve para
inicializar os atributos e é executado automaticamente sempre
que você cria um novo objeto.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Quando são especificados os atributos de uma classe, apenas se


diz ao sistema algo como "objetos desta classe Pessoa vão ter
uma variável chamada Nome que é do tipo String, uma variável
chamada idade que é do tipo inteiro, etc, etc". Mas estas
variáveis não são criadas, elas só serão criadas no construtor. O
construtor também pode receber parâmetro, desta forma, o
desenvolvedor pode passar para o construtor uma String
contendo o nome da Pessoa que você está criando, sua idade,
etc. Normalmente, a sintaxe é algo parecido com isto:

Pessoa joao := new Pessoa( "João", 13 );


POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- OS PILARES DA PROGRAMAÇÃO ORIENTADA A OBJETOS:


Para entender exatamente do que se trata a orientação a
objetos, é necessário entender quais são os requerimentos de
uma linguagem para ser considerada nesse paradigma. Para
isso, a linguagem precisa atender a quatro tópicos bastante
importantes:
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

1- ABSTRAÇÃO:
A abstração consiste em um dos pontos mais importantes dentro
de qualquer linguagem Orientada a Objetos. Como estamos
lidando com uma representação de um objeto real (o que dá
nome ao paradigma), temos que imaginar o que esse objeto irá
realizar dentro de nosso sistema. São três pontos que devem ser
levados em consideração nessa abstração.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

O primeiro ponto é darmos uma identidade ao objeto que


iremos criar. Essa identidade deve ser única dentro do sistema
para que não haja conflito. Na maior parte das linguagens, há o
conceito de pacotes (ou namespaces). Nessas linguagens, a
identidade do objeto não pode ser repetida dentro do pacote, e
não necessariamente no sistema inteiro.
A segunda parte diz respeito a características do objeto. No
mundo real qualquer objeto possui elementos que o definem.
Dentro da programação orientada a objetos, essas
características são nomeadas propriedades. Por exemplo, as
propriedades de um objeto “Cachorro” poderiam ser
“Tamanho”, “Raça” e “Idade”.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

E a terceira parte é definirmos as ações que o objeto irá


executar. Essas ações, ou eventos, são chamados métodos.
Esses métodos podem ser extremamente variáveis, desde
“Acender()” em um objeto lâmpada até “Latir()” em um objeto
cachorro.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

2- ENCAPSULAMENTO:
O encapsulamento se trata de um dos elementos que
adicionam segurança à aplicação em uma programação
orientada a objetos pelo fato de esconder as propriedades,
criando uma espécie de caixa preta.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A maior parte das linguagens orientadas a objetos implementam


o encapsulamento baseado em propriedades privadas, ligadas a
métodos especiais chamados getters e setters, que irão retornar
e setar o valor da propriedade, respectivamente. Essa atitude
evita o acesso direto a propriedade do objeto, adicionando uma
outra camada de segurança à aplicação.
Para fazermos um paralelo com o que vemos no mundo real,
temos o encapsulamento em outros elementos. Por exemplo,
quando clicamos no botão ligar da televisão, não sabemos o que
está acontecendo internamente. Podemos então dizer que os
métodos que ligam a televisão estão encapsulados.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

3- HERANÇA:
O reuso de código é uma das grandes vantagens da programação
orientada a objetos. Muito disso se dá por uma questão que é
conhecida como herança. Essa característica otimiza a produção
da aplicação em tempo e linhas de código.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Para entendermos essa característica, vamos imaginar uma


família: a criança, por exemplo, está herdando características de
seus pais. Os pais, por sua vez, herdam algo dos avós, o que faz
com que a criança também o faça, e assim sucessivamente. Na
orientação a objetos, a questão é exatamente assim, como
mostra na imgem.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

O objeto abaixo na hierarquia irá herdar características de todos


os objetos acima dele, seus “ancestrais”. A herança a partir das
características do objeto mais acima é considerada herança
direta, enquanto as demais são consideradas heranças indiretas.
Por exemplo, na família, a criança herda diretamente do pai e
indiretamente do avô e do bisavô.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A questão da herança varia bastante de linguagem para


linguagem. Em algumas delas, como C++, há a questão da
herança múltipla. Isso, essencialmente, significa que o objeto
pode herdar características de vários “ancestrais” ao mesmo
tempo diretamente. Em outras palavras, cada objeto pode
possuir quantos pais for necessário. Devido a problemas, essa
prática não foi difundida em linguagens mais modernas, que
utilizam outras artimanhas para criar uma espécie de herança
múltipla.
Outras linguagens orientadas a objetos, como C#, trazem um
objeto base para todos os demais. A classe object fornece
características para todos os objetos em C#, sejam criados pelo
usuário ou não.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

4- POLIMORFISMO:
Outro ponto essencial na programação orientada a objetos é o
chamado polimorfismo. Na natureza, vemos animais que são
capazes de alterar sua forma conforme a necessidade, e é dessa
ideia que vem o polimorfismo na orientação a objetos. Como
sabemos, os objetos filhos herdam as características e ações de
seus “ancestrais”. Entretanto, em alguns casos, é necessário que
as ações para um mesmo método seja diferente. Em outras
palavras, o polimorfismo consiste na alteração do
funcionamento interno de um método herdado de um objeto
pai.
O termo polimorfismo é originário do grego e significa "muitas
formas".
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Como um exemplo, temos um objeto genérico


“Eletrodoméstico”. Esse objeto possui um método, ou ação,
“Ligar()”. Temos dois objetos, “Televisão” e “Geladeira”, que não
irão ser ligados da mesma forma. Assim, precisamos, para cada
uma das classes filhas, reescrever o método “Ligar()”.
Com relação ao polimorfismo, valem algumas observações.
Como se trata de um assunto que está intimamente conectado à
herança, entender os dois juntamente é uma boa ideia. Outro
ponto é o fato de que as linguagens de programação
implementam o polimorfismo de maneiras diferentes. O C#, por
exemplo, faz uso de método virtuais (com a palavra-
chave virtual) que podem ser reimplementados (com a palavra-
chave override) nas classes filhas. Já em Java, apenas o atributo
“@Override” é necessário.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- OS PILARES:
Esses quatro pilares são essenciais no entendimento de qualquer
linguagem orientada a objetos e da orientação a objetos como
um todo. Cada linguagem irá implementar esses pilares de uma
forma, mas essencialmente é a mesma coisa. Apenas a questão
da herança, como comentado, que pode trazer variações mais
bruscas, como a presença de herança múltipla. Além disso, o
encapsulamento também é feito de maneiras distintas nas
diversas linguagens, embora os getters e setters sejam
praticamente onipresentes.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PRINCIPAIS VANTAGENS DA POO:


- A orientação a objetos permite que haja uma reutilização do
código criado, diminuindo o tempo de desenvolvimento, bem
como o número de linhas de código. Isso é possível devido ao
fato de que as linguagens de programação orientada a objetos
trazem representações muito claras de cada um dos elementos,
e esses elementos normalmente não são interdependentes.
Essa independência entre as partes do software é o que permite
que esse código seja reutilizado em outros sistemas no futuro.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Outra grande vantagem diz respeito a leitura e manutenção de


código. Como a representação do sistema se aproxima muito do
que vemos na vida real, o entendimento do sistema como um
todo e de cada parte individualmente fica muito mais simples.
Isso permite que a equipe de desenvolvimento não fique
dependente de uma pessoa apenas, como acontecia com
frequência em linguagens estruturadas como o C, por exemplo.
Podemos fazer uma especificação UML antes de iniciar o
desenvolvimento do software em si, e em seguida dividirmos o
sistema em classes e pacotes, e cada membro da equipe pode
ficar responsável por desenvolver uma parte do sistema.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

A criação de bibliotecas é outro ponto que é muito mais simples


com a orientação a objetos. No caso das linguagens
estruturadas, como o C, temos que as bibliotecas são coleções
de procedimentos (ou funções) que podem ser reutilizadas. No
caso da POO, entretanto, as bibliotecas trazem representações
de classes, que são muito mais claras para permitirem a
reutilização.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PRINCIPAIS DESVANTAGENS DA POO:


- O aprendizado do paradigma de programação orientada a
objetos é bem mais complicado no início do que os velhos
sistemas procedurais. Para começar a programar é necessário ter
estabelecido uma série de conceitos bastante complexos. Já na
programação procedural tradicional, basta decorar meia dúzia de
comandos e você já consegue fazer um programa simples.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

Outro fato é que dificilmente uma linguagem orientada a


objetos conseguirá ter um desempenho em tempo de execução
superior a linguagens não orientadas a objetos. Isso acontece
devido à complexidade do modelo, que traz representações na
forma de classes. Essas representações irão fazer com que a
execução do programa tenha muitos desvios, diferente da
execução sequencial da programação estruturada.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- PARA FINALIZAR:
No momento atual em que estamos, tecnologicamente essa
execução mais lenta não é sentida. Isso significa que, em termos
de desenvolvimento de sistemas modernos, a programação
orientada a objetos é a mais recomendada devido as vantagens
que foram apresentadas. Essas vantagens são derivadas do
modelo de programação, que busca uma representação baseada
no que vemos no mundo real.
POO – PROGRAMAÇÃO ORIENTDA A OBJETOS

- REFERÊNCIAS:
- http://www.hardware.com.br/
- http://www.devmedia.com.br/
- http://www.bosontreinamentos.com.br/
- http://www.linhadecodigo.com.br/

Você também pode gostar