Você está na página 1de 13

PARADIGMAS DE

PROGRAMAÇÃO
Fabricio Machado da Silva
Programação orientada
a objetos: modelagem
de problemas
Objetivos de aprendizagem
Ao final deste texto, você deverá apresentar os seguintes aprendizados:

„ Definir programação orientada a objetos.


„ Identificar as linguagens orientadas a objetos.
„ Aplicar a programação orientada a objetos.

Introdução
A programação orientada a objetos (POO) surgiu como um paradigma
que apresentava uma disciplina para novos projetos de desenvolvimento
de software. Etapas com análise e projeto de software que, em outros
paradigmas, acabavam sendo minimizados na POO, se tornam requisitos
fundamentais.
Não é difícil imaginar que a POO acabou se tornando um padrão con-
sumido pela engenharia de software e que possibilitou avanços significati-
vos na programação de computadores. Seu uso permitiu que reutilização
de código se tornasse algo praticamente comum em desenvolvimento
de software, servindo como base para novos conceitos, como os serviços.
Neste capítulo, você entenderá o conceito de POO, conhecerá al-
gumas linguagens que implementam esse paradigma e exemplos de
aplicação em projetos de programas de computador.
2 Programação orientada a objetos: modelagem de problemas

Programação orientada a objetos


O conceito de POO tem suas raízes na linguagem de programação Simula 67.
Contudo sua grande evolução deu-se com a chegada da linguagem Small-
talk, criada por Alan Kay, o precursor dos conceitos desse paradigma de
programação:

De fato, algumas pessoas consideram Smalltalk o modelo base para uma


linguagem de programação puramente orientada a objetos. Uma linguagem
orientada a objetos deve fornecer suporte para três recursos chave de lingua-
gem: tipos de dados abstratos, herança e vinculação dinâmica de chamadas
a métodos (SEBESTA, 2018, p. 547).

Linguagens que suportam a POO são, atualmente, muito usadas. Algumas


das linguagens de programação mais novas, projetadas para a POO, não
implementam mais conceitos de linguagens procedurais como as primei-
ras implementavam. Porém, ainda assim, empregam estruturas básicas da
programação estruturada e são imperativas, como as linguagens Java e C#,
atualmente muito utilizadas e consideradas exemplos de sucesso de POO.
Smalltalk 80 foi primeira linguagem a implementar completamente os
conceitos da POO, pois, em 1980, mesmo com a evolução dos módulos e pacotes
pelas linguagens de programação da época, os problemas ainda persistiam.
Um dos maiores problemas com os recursos atuais era que não existia meca-
nismo para inicialização e finalização automática do tipo fornecido. Segundo
Tucker e Noonan (2009, p. 307) “As inicializações normalmente necessárias
incluem abertura de um arquivo, alocação de memória e inicialização de
variáveis locais ao módulo”. Já quanto às finalizações, incluem o fechamento
de arquivos e a liberação de memória.
Além disso, alguns programadores e projetistas começaram a perceber
que algumas necessidades não eram atendidas com as atuais linguagens de
programação imperativa de decomposição funcional e abstração de dados,
como os padrões de graphical user interfaces (GUI), que poderiam ser melhor
implementadas com o conceito de objetos que pudessem trocar mensagens
uns com os outros. Uma GUI poderia ser mais facilmente implementada se
considerarmos, por exemplo, que seus componentes (botões, áreas de texto,
imagens etc.) são tratados como objetos que podem interagir entre si e com
o usuário do sistema.
Programação orientada a objetos: modelagem de problemas 3

Assim, a POO surge como um paradigma centrado no desenvolvimento


de objetos, no lugar da atual decomposição funcional e abstração de dados.
Na Figura 1, você pode perceber um pouco dessa diferença entre a atual
programação estruturada e o conceito de objetos.

Programação estruturada POO


Método
Procedimento Dados objeto ...
Método
Procedimento
Método
Dados Procedimento Dados objeto ...
globais Procedimento
Método

...
...
Método
Procedimento
Dados objeto ...
Método

Figura 1. Comparativo entre programação estruturada e objetos.


Fonte: Adaptada de Gasparotto (2014).

Em uma linguagem de POO, o encapsulamento dos tipos de dados e suas


funções é alcançado por meio da implementação das classes. Uma classe é
uma declaração de um tipo de objeto que encapsula os seus tipos de dados
pelos seus atributos e funções por meio de seus métodos. É comum ouvir falar
que uma classe serve como uma matriz de objetos, pois, ao determinar os seus
atributos e métodos, serve como um modelo para que diversas instâncias de
um objeto sejam criadas a partir de sua estrutura.
Ao analisar a Figura 1, você pode perceber que um programa em progra-
mação estrutural possui um desempenho melhor que um mesmo programa
em POO, e isso ocorre pelo fato de, na programação estruturada, um código
ser executado após o outro sequencialmente, ao passo que na POO são ne-
cessários alguns desvios. Entretanto, a POO traz outros pontos que acabam
sendo mais interessantes no contexto de aplicações modernas. Como, na
maioria das aplicações, o desempenho das aplicações não é uma das grandes
preocupações (devido ao poder de processamento dos computadores atuais),
a POO se tornou muito difundida.
4 Programação orientada a objetos: modelagem de problemas

Na próxima seção, vamos abordar como as linguagens Java, C# e Python


implementam os conceitos da POO. Essas linguagens serão exemplos por serem
muito utilizadas atualmente no contexto de desenvolvimento de software.

Linguagens orientadas a objetos


Agora, você entenderá um pouco sobre as linguagens Java, C# e Python,
atualmente muito utilizadas e que implementam os conceitos da POO.
Java é uma linguagem de programação que foi desenvolvida pela Sun
Microsystems no início da década de 1990. Ela se tornou um símbolo da POO,
inclusive causando certa confusão, por julgarem que a POO era um paradigma
de Java e não ao contrário (MACHADO; FRANCO; BERTAGNOLLI, 2016,
p. 54).
De fato, a característica mais marcante da linguagem de programação
Java está relacionada a sua portabilidade, pois os sistemas construídos não
são compilados em código nativo da plataforma. Programas em Java são
compilados para um bytecode, que é executado por uma máquina virtual,
a Java virtual machine, que permite que os programas escritos em Java possam
ser rodados em qualquer plataforma compatível com a sua máquina virtual.
Em Java, todo o programa usa classes e objetos, e é fundamental que o
programador compreenda esses conceitos da POO para conseguir programar
em Java. Os programas são escritos em pequenos pedaços separados, chamados
de objetos. Segundo Machado, Franco e Bertagnolli (2016, p. 78), “Objetos
são pequenos programas que guardam dentro de si os dados — em suma, as
variáveis — que precisam para executar suas tarefas”. Os objetos também
trazem em si, como sub-rotinas, as instruções para processar esses dados.
As variáveis que um objeto guarda são chamadas de atributos, e as suas sub-
-rotinas são chamadas de métodos.
Programação orientada a objetos: modelagem de problemas 5

Veja o exemplo de uma classe Cachorro em Java com os atributos nome,


peso, altura e cor e o método pular().

public class Cachorro{


public String nome;
public float peso;
public float altura;
public String cor;

void pular{
if(altura>=80){
System.out.println("Seu Cachorro pula alto");

}
}
}

Como você pode observar, a programação em Java é praticamente regrada


pelos conceitos de POO, e as classes são a base de qualquer código Java.
Qualquer análise para um novo programa em Java deve partir do entendimento
do seu contexto e projeção das classes.
Agora, vamos analisar a linguagem C#. A linguagem C# (lê-se C Sharp)
é definida pela Microsoft, que a desenvolve como uma linguagem de POO
que faz parte de sua plataforma de desenvolvimento .NET. Embora a lingua-
gem C# tenha sido criada totalmente do zero pela Microsoft, foi baseada na
linguagem C++, e possui muitos elementos das linguagens Java e Pascal.
A plataforma .NET na qual teve seu desenvolvimento inicial, apresentou
algumas limitações que motivaram que, em 1999, fosse montada uma força
tarefa para o desenvolvimento de uma nova linguagem para essa plataforma.
Segundo Ledur (2018, p. 108):

A criação da linguagem C# ajudou muito no desenvolvimento do .NET, pois


a plataforma não precisou se adequar a nenhum código de alguma linguagem
já existente. O C# foi criado especificamente para .NET, sendo que muitas
outras linguagens têm suporte à C#.
6 Programação orientada a objetos: modelagem de problemas

Os principais objetivos do projeto da linguagem C# são:

„ Ser simples moderna e de propósito geral OO.


„ Ter uma linguagem e suas implementações que forneçam suporte para
princípios de engenharia de software.
„ Ser destinada à utilização no desenvolvimento de componentes de
software.
„ Possibilitar a portabilidade dos programas escritos em C#, assim como
é possível na linguagem Java.
„ Fornecer suporte para a escrita de programa, tanto hospedados local-
mente como incorporados.

A Figura 2 mostra um exemplo da estrutura de uma classe em C#.

Figura 2. Exemplo da estrutura de uma classe em C#.


Fonte: Rodrigues (2017, documento on-line).

Você pode perceber que, assim como em Java, C# possui uma estrutura
semelhante com a declaração dos atributos da classe logo no início e depois em
seus métodos, além de uma semelhança na sintaxe entre as duas linguagens,
o que é explicado devido ao embasamento do C# na linguagem Java.
Programação orientada a objetos: modelagem de problemas 7

Para finalizar esta seção, vamos abordar a POO na linguagem de progra-


mação Python, que é uma linguagem de programação bastante utilizada por
sua facilidade de aprendizado, aliada as suas características de programação
de alto nível, de script, imperativa, OO e interpretada.
Python é uma linguagem que permite o desenvolvimento tanto no conceito
de programação estruturada como a POO. Possui suporte a tipificação dinâ-
mica, recursos de gerenciamento de uso de memória, além de oferecer uma
abrangente biblioteca padrão. Os interpretadores Python possuem suporte
para diversos sistemas operacionais, possibilitando a adaptação dos sistemas
construídos.
A origem do nome Python, apesar de confundido com o animal cobra,
na realidade é oriunda do grupo de comédia britânico que era assistido pelo
criador da linguagem, chamado Monty Python, formado por Graham Cha-
pman, John Cleese, Eric Idle, Michael Palin, Terry Jones e Terry Gilliam.
Carinhosamente, são chamados de Pythonistas os programadores Python,
e as referências aos trabalhos do grupo de comédia estão espalhadas pelos
tutoriais e sua documentação (LUTZ; ASCHER, 2007).
Python é uma linguagem muito simples, fácil de usar e aprender, apesar
disso, também é uma linguagem extremamente robusta e utilizada nas mais
diversas soluções:

„ back-end de sistemas Web, customer relationship management (CRM),


ou gerenciamento de relacionamento com o cliente;
„ pesadas simulações de engenharia;
„ processamento pesado de efeitos especiais de filmes;
„ soluções de análise de dados (data analytics);
„ aprendizado de máquina, do inglês machine learning (ML).

Veja o exemplo de uma classe Pessoa em Python.

class Pessoa:
def _ init _ (self, nome, idade):
self.nome = nome
self.idade = idade

def setNome(self, nome):


self.nome = nome
8 Programação orientada a objetos: modelagem de problemas

def setIdade(self, idade):


self.idade = idade

def getNome(self):
return self.nome

def getIdade(self):
return self.idade

Apesar da sintaxe do Python ser um pouco diferente da sintaxe de Java e


C#, é possível verificar a estrutura da classe com a definição de atributos e
métodos e que Python é outro exemplar de linguagem OO. Na próxima seção,
você verá alguns exemplos da aplicação da programação OO em classes de
exemplos, para fixar o entendimento.

Desenvolvendo com programação


orientada a objetos
Para ajudar a elucidar o conceito de POO, vamos começar analisando a se-
guinte situação: um exemplo em Java que demonstra a criação da classe
Pessoa com os atributos nome, dataNascimento e CPF; e o método
tirarCopias, que calcula o custo da geração de cópias em um sistema de
gestão de impressões de uma escola. Esse sistema deve calcular o valor da
cópia embasado na seguinte regra:

„ para alunos da escola, o valor unitário da cópia será de R$ 0,07;


„ para os demais usuários, o valor unitário será de R$ 0,10.

A diferença é que este requisito será implementado com os seguintes


conceitos da POO:

„ classes;
„ heranças.
Programação orientada a objetos: modelagem de problemas 9

Observe na Figura 3, onde consta a classe Pessoa.

Figura 3. Classe Pessoa em Java.


Fonte: Geovane (2012, documento on-line).

Na classe Pessoa podemos observar os seguintes atributos:

„ nome;
„ cpf;
„ data_nascimento.

Observamos, também, que essa classe possui o método tirarCopias,


que faz o cálculo do valor da cópia para pessoas em geral, ou seja, pessoas
que não são alunos. Porém, você pode estar se perguntando, onde estão os
dados do aluno e o método que faz o cálculo do valor da cópia quando se
trata de um aluno?
10 Programação orientada a objetos: modelagem de problemas

Esses dados estão na classe Aluno, mas, como o Aluno também é uma
pessoa e tem alguns atributos que são comuns as demais pessoas, não vamos
repetir na classe Aluno. A Figura 4 mostra como ficaria a classe Alunos
em Java.

Figura 4. Classe Alunos em Java.


Fonte: Geovane (2012, documento on-line).

É possível, portanto, observar que no início da classe Aluno existe a


declaração extends. Essa declaração significa que a classe Aluno está
dizendo que herda a classe Pessoa, dessa forma, os atributos que são comuns
à classe Pessoa não necessitam ser repetidos. Além disso, percebe-se que a
classe Aluno possui o atributo matrícula, que é específico do Aluno.
Por fim, veja que, na classe Aluno, o método tirarCopias é alterado
de acordo com o valor específico para os Alunos, o que é possível em razão
de um outro recurso de POO: o polimorfismo. Polimorfismo é um recurso que
permite ao objeto ter um comportamento diferente, dependendo da situação.
Nesse caso, o cálculo do valor da cópia se altera por conta da situação de
desconto de aluno.
Pelos exemplos apresentados, percebe-se na prática alguns recursos e usos
da programação OO e seus benefícios para a programação, possibilitando,
principalmente, a reutilização do código.
Conceitos como os observados nos exemplos das Figuras 3 e 4 são casos
comuns em POO, por isso é importante todo programador conseguir abstrair
classes com seus atributos e métodos separados e, quando utilizar conceitos
bases da POO, como herança de classes, evitar reutilização de código.
Programação orientada a objetos: modelagem de problemas 11

GASPAROTTO, H. M. Os 4 pilares da Programação Orientada a Objetos. DevMedia,


Rio de Janeiro, 2014. Disponível em: https://www.devmedia.com.br/os-4-pilares-da-
-programacao-orientada-a-objetos/9264. Acesso em: 15 set. 2019.
GEOVANE, H. Entendendo e Aplicando Herança em Java. DevMedia, Rio de Janeiro, 2012.
Disponível em: https://www.devmedia.com.br/entendendo-e-aplicando-heranca-em-
-java/24544. Acesso em: 15 set. 2019.
LEDUR, C. L. Desenvolvimento de sistemas com C#. Porto Alegre: SAGAH, 2018. 268 p.
LUTZ, M.; ASCHER, D. Aprendendo Python. 2. ed. Porto Alegre: Bookman; O’Reilly, 2007.
566 p.
MACHADO, R. P.; FRANCO, M. H. I.; BERTAGNOLLI, S. C. Desenvolvimento de software III:
programação de sistemas web orientada a objetos em Java. Porto Alegre: Bookman,
2016. 220 p. (Série Tekne; Eixo Informação e Comunicação).
RODRIGUES, J. Como criar minha primeira classe em C#. DevMedia, Rio de Janeiro, 2017.
Disponível em: https://www.devmedia.com.br/como-criar-minha-primeira-classe-em-
-csharp/38785. Acesso em: 15 set. 2019.
SEBESTA, R. W. Conceitos de linguagem de programação. 11. ed. Porto Alegre: Bookman,
2018. 758 p.
TUCKER, A. B.; NOONAN, R. E. Linguagens de programação: princípios e paradigmas. 2.
ed. Porto Alegre: AMGH, 2009. 630 p.

Leituras recomendadas
EDELWEISS, N.; LIVI, M. A. C. Algoritmos e programação: com exemplos em Pascal e C.
Porto Alegre: Bookman, 2014. 476 p. (Série Livros Didáticos Informática UFRGS).
MILETTO, E. M.; BERTAGNOLLI, S. C. Desenvolvimento de software II: introdução ao de-
senvolvimento web com HTML, CSS, JavaScript e PHP. Porto Alegre: Bookman, 2014.
276 p. (Série Tekne; Eixo Informação e Comunicação).
NICOLETTI, M. C. A cartilha Prolog. São Carlos: Edufscar, 2003. 124 p. (Série Apontamentos).
OKUYAMA, F. Y.; MILETTO, E. M.; NICOLAO, M. Desenvolvimento de software I: conceitos bá-
sicos. Porto Alegre: Bookman, 2014. 236 p. (Série Tekne; Eixo Informação e Comunicação).
PINHEIRO, F. A. C. Elementos de programação em C: em conformidade com o padrão
ISO / IEC 9899. Porto Alegre: Bookman, 2012. 548 p.

Você também pode gostar