Buscar

Introdução à Programação Orientada a Objetos

Prévia do material em texto

*
*
Linguagem de Programação
 Orientada a Objetos 
Orientação a Objetos 
Prof. Cristiano B. de Oliveira
*
*
Introdução a orientação a objetos
Definição do termo orientação a objetos;
O que é programação orientada a objetos;
Diferenças entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software;
Conceitos básicos associados à programação orientada a objetos;
*
*
Introdução a orientação a objetos
Conceitos fundamentais para o desenvolvimento de bons programas dentro da abordagem de orientação a objetos;
Visão geral do paradigma de programação orientada a objetos;
*
*
Introdução a orientação a objetos
Definição do termo orientação a objetos:
Um breve relato da história da 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, ... 	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 construidas 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. 
*
*
Introdução a orientação a objetos
Definição do termo orientação a objetos:
	O termo orientação a objetos pressupõe uma organização de software em termos de coleção de objetos discretos incorporando estrutura e 
comportamento próprios. Esta abordagem de organização é essencialmente 
diferente do desenvolvimento tradicional de software, onde estruturas de dados 
e rotinas são desenvolvidas de forma apenas fracamente acopladas. 
*
*
Introdução a orientação a objetos
Definição do termo orientação 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. 	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. 	Ficou confuso? Vamos a um 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. 
*
*
Introdução a orientação a objetos
O que é programação orientada a objetos:
Programação orientada a objetos - POO
 	A programação Orientada a objetos (POO) é uma forma especial de programar, mais próximo de como expressaríamos as coisas na vida real do que outros tipos de programação. Com a POO temos que aprender a pensar as coisas de uma maneira distinta, para escrever nossos programas em termos de objetos,
propriedades e métodos. 
Motivação - POO
 	Durante anos, os programadores se dedicaram a construir aplicações muito parecidas que resolviam uma vez ou outra, os mesmo problemas. Para conseguir que os esforços dos programadores possam ser utilizados por outras pessoas foi criado a POO. Esta é uma série de normas de realizar as coisas de 
maneira com que outras pessoas possam utilizá-las e adiantar seu trabalho, de maneira que consigamos que o código possa se reutilizar.
*
*
Introdução a orientação a objetos
O que é programação orientada a objetos:
Motivação - POO
 	A POO não é difícil, mas é uma forma especial de pensar, às vezes subjetiva de quem a programa, de forma que a maneira de fazer as coisas possa ser diferente segundo o programador. Embora possamos fazer os programas de formas distintas, nem todas elas são corretas, o difícil não é programar orientado a objetos e sim, programar bem. Programar bem é importante porque assim podemos aproveitar todas as vantagens da POO. 
*
*
Introdução a orientação a objetos
O que é programação orientada a objetos:
Como se pensa em objetos - POO
 	Pensar em termos de objetos é muito parecido a como faríamos na vida real. Por exemplo, vamos pensar em um carro para dar um modelo em um esquema de POO. Diríamos que o carro é o elemento principal que tem uma série de características, como poderiam ser a cor, o modelo ou a marca. Ademais tem uma série de funcionalidades associadas, como podem ser andar, parar ou estacionar.
	Então em um esquema POO o carro seria o objeto, as propriedades seriam as características como a cor ou o modelo e os métodos seriam as funcionalidades associadas como andar ou parar. 
	Por 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.
	A fração será o objeto e terá duas propriedades, 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.
*
*
Introdução a orientação a objetos
O que é programação orientada a objetos:
Como se pensa em objetos - POO
 	Estes objetos poderão ser utilizados nos programas, por exemplo, em um programa de matemáticas seria feito o uso de objetos fração e em um programa que providencie uma oficina de carros, seria utilizado o uso de objeto carro. Os programas Orientados a objetos utilizam muitos objetos para realizar as ações que se desejam realizar e eles mesmos também são objetos. Ou seja, a oficina de carros será um objeto que utilizará objetos carro, ferramenta, mecânico, trocas, etc.
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) tradicionais - POO
 	As técnicas de programação(desenvolvimento) tradicionais, como por exemplo a “decomposição funcional”, leva o desenvolvedor a decompor o sistema em partes menores (funções), criando um emaranhado de inúmeras funções
que chamam umas às outras.
	Geralmente não há separação de conceitos e responsabilidades,
causando dependências enormes no sistema, dificultando futuras manutenções no código do programa.
	Não existe muito reaproveitamento de código,ao contrário, muitas vezes se tem muito código duplicado.
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) tradicionais – POO
É a famosa programação(desenvolvimento) espaguete.. 
 e pode causar uma grande indigestão.
 	
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) orientada a objetos - POO
 	O paradigma da Orientação a Objetos, ou Programação Orientada a
Objetos (POO ou OOP), eleva a programação e o desenvolvimento de sistemas para um novo patamar.
	A OO é um mecanismo moderno que ajuda a definir a estrutura de
programas baseada nos conceitos do mundo real, sejam eles reais ou abstratos.
	A OO permite criar programas componentizados, separando as partes do sistema por responsabilidades e fazendo com que essas partes se comuniquem entre sí, por meio de mensagens.
	Essas partes do sistemas são chamadas de OBJETOS.
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) orientada a objetos - POO
 	A OO é mais intuitiva e fácil de aprender do que as técnicas tradicionais,
pois foca o problema em conceitos do mundo real.
	Dentre as vantagens que a OO proporciona, podemos destacar:
	 • aumento de produtividade
	 • reuso de código
	 • redução das linhas de código programadas
 • separação de responsabilidades
 • componentização
 • maior flexibilidade do sistema
 • escalabilidade
 • facilidade na manutenção, dentre outras vantagens.
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) orientada a objetos - POO
 	A OO introduz e enfatiza os seguintes conceitos:
		• Objeto
		• Mensagem
		• Classe
		• Abstração
		• Encapsulamento
		• Herança
		• Polimorfismo
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) orientada a objetos - POO
 	Objetos são a chave para se compreender a tecnologia orientada a
objetos. Você olha ao seu redor e tudo o que vê são objetos: carro, mesa,
janela, livro, pessoa, etc.
	Os objetos do mundo real têm duas carecterísticas em comum: ESTADO e COMPORTAMENTO.
	
Estado
 
 O estado de um objeto revela seus dados importantes.
 Por exemplo, uma pessoa tem: idade, peso, altura, cor de cabelo, cor da pele.
Comportamento
 O comportamento são as ações que aquele objeto pode exercer ou
 executar. Por exemplo, uma pessoa pode: andar, falar, ouvir, pular.
*
*
Introdução a orientação a objetos
Diferença entre o desenvolvimento orientado a objetos e o desenvolvimento tradicional de software:
Técnicas de programação(desenvolvimento) orientada a objetos - POO
 	Esses objetos podem ser tanto objetos concretos (carro, livro, nota fiscal), quanto conceitos abstratos (conta corrente, venda, pessoa jurídica).
	Na Orientação a Objetos, os objetos do mundo real são modelados e
representados no mundo computacional, ou seja, dentro do sistema, por meio de objetos de software.
	Cada objeto deve ser conhecido, bem definido e ter seu limite e um
significado dentro do sistema.
	Os objetos de software, assim como os objetos do mundo real, também
possuem estado e comportamento.
*
*
Introdução a orientação a objetos
Conceitos básicos associados à programação orientada a objetos:
Conceitos básicos - POO
 	A abordagem de orientação a objetos favorece a aplicação de diversos 
conceitos considerados fundamentais para o desenvolvimento de bons programas, 
tais como abstração e encapsulação. 
	Tais conceitos não são exclusivos desta abordagem, mas são suportados de forma melhor no desenvolvimento orientado a objetos do que em outras metodologias.
	• Abstração
	• Encapsulação
	• Compartilhamento
*
*
Introdução a orientação a objetos
Conceitos básicos associados à programação orientada a objetos:
Conceitos básicos - POO
 Abstração
	Abstração consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades ''acidentais''. 
 
	Em termos de desenvolvimento de sistemas, isto significa concentrar-se no que um objeto é e faz antes de se decidir como ele será implementado. O uso de abstração preserva a liberdade para tomar decisões de desenvolvimento ou de implementação apenas quando há um melhor entendimento do problema a 
ser resolvido. 
	Muitas linguagens de programação modernas suportam o conceito de
abstração de dados; porém, o uso de abstração juntamente com polimorfismo e 
herança, como suportado em orientação a objetos, é um mecanismo muito mais poderoso. 
	O uso apropriado de abstração permite que um mesmo modelo conceitual (orientação a objetos) seja utilizado para todas as fases de desenvolvimento de um sistema, desde sua 
análise até sua documentação. 
*
*
Introdução a orientação a objetos
Conceitos básicos associados à programação orientada a objetos:
Conceitos básicos - POO
 Encapsulação
	Encapsulação, também referido como esconder informação, consiste em separar os aspectos externos de um objeto, os quais são acessíveis a outros objetos, dos detalhes internos de implementação do objeto, os quais permanecem escondidos dos outros objetos. O uso de encapsulação evita que um programa torne-se tão interdependente que uma pequena mudança tenha grandes efeitos colaterais. 
	O uso de encapsulação permite que a implementação de um objeto possa ser modificada sem afetar as aplicações que usam este objeto. Motivos para modificar a implementação de um objeto podem ser por exemplo melhoria 
de desempenho, correção de erros e mudança de plataforma de execução. 
	Assim como abstração, o conceito de encapsulação não é exclusivo da abordagem de orientação a objetos. Entretanto, a habilidade de se combinar estrutura de dados e comportamento em uma única entidade torna a encapsulação mais elegante e mais poderosa do que em linguagens convencionais que separam estruturas de dados e comportamento
*
*
Introdução a orientação a objetos
Conceitos básicos associados à programação orientada a objetos:
Conceitos básicos - POO
 Compartilhamento
	Técnicas de orientação a objetos promovem compartilhamento em diversos níveis distintos. 
	Herança de estrutura de dados e comportamento permite que estruturas comuns sejam compartilhadas entre diversas classes derivadas similares sem redundância. O compartilhamento de código usando herança é uma das grandes vantagens da orientação a objetos. Ainda mais importante que a economia de código é a clareza conceitual de reconhecer que operações diferentes são na verdade a mesma coisa, o que reduz o número de casos distintos que devem ser entendidos e analisados. 
	O desenvolvimento orientado a objetos não apenas permite que a informação dentro de um projeto seja compartilhada como também oferece a possibilidade de reaproveitar projetos e código em projetos futuros. 
	As ferramentas para alcançar este compartilhamento, tais como abstração, encapsulação e herança, estão presentes na metodologia; uma estratégia de reuso entre projetos é a definição de bibliotecas de elementos reusáveis. Entretanto, orientação a objetos não é uma fórmula mágica para alcançar reusabilidade; para tanto, 
é preciso planejamento e disciplina para pensar em termos genéricos, não voltados simplesmente para a aplicação corrente.
	
**
Introdução a orientação a objetos
Conceitos fundamentais para o desenvolvimento de bons programas dentro da abordagem de orientação a objetos:
Conceitos básicos / Conceitos fundamentais – POO
	A abordagem de orientação a objetos favorece a aplicação de diversos conceitos considerados fundamentais para o desenvolvimento de bons programas, tais como abstração e encapsulação. 
	Tais conceitos não são exclusivos desta abordagem, mas são suportados de forma melhor no desenvolvimento orientado a objetos do que em outras metodologias. 	
	
*
*
Introdução a orientação a objetos
Visão geral do paradigma de programação orientada a objetos:
Paradigma de programação orientada a objetos(Paradigma de programação) – POO
	Um paradigma de programação fornece e determina a visão que o programador possui sobre a estruturação e execução do programa. Por exemplo, em programação orientada a objetos, programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto em programação funcional os programadores abstraem o programa como uma sequência de funções executadas de modo empilhado. 
	Assim como diferentes grupos em engenharia de software propõem diferentes metodologias, diferentes linguagens de programação propõem diferentes paradigmas de programação. Algumas linguagens foram 
desenvolvidas para suportar um paradigma específico (Smalltalk e Java suportam o paradigma de orientação a objetos enquanto Haskell e Scheme suportam o paradigma funcional), enquanto outras linguagens suportam múltiplos paradigmas (como o LISP, Perl, Python, C++ e Oz).
		
	
*
*
Introdução a orientação a objetos
Visão geral do paradigma de programação orientada a objetos:
Paradigma de programação orientada a objetos(Paradigma de programação) – POO
	Os paradigmas de programação são muitas vezes diferenciados pelas técnicas de programação que proíbem ou permitem. Por exemplo, a programação estruturada não permite o uso de goto. Esse é um dos 
motivos pelo qual novos paradigmas são considerados mais rígidos que estilos tradicionais. Apesar disso, evitar certos tipos de técnicas pode facilitar a prova de conceito de um sistema, podendo até mesmo facilitar o desenvolvimento de algoritmos.
	O relacionamento entre paradigmas de programação e linguagens de programação pode ser complexo pelo fato de linguagens de programação poderem suportar mais de um paradigma.
		
	
*
*
Programação Orientada a Objetos
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Continue navegando