Linguagens de Programação
Orientada a Objetos
Apresentação da disciplina
Prof. Artur Oliveira Gomes
Sistemas de Informação - CPAN - UFMS
3 de março de 2014
Sequência de Passos x Modelos
I Programação como sequência de passos
I Paradigma tradicional onde um problema é
resolvido a partir de um início e fim bem definidos e eventualmente dividido em sub-rotinas;
I Programação utilizando-se de objetos
I O paradigma da orientação a objetos considera
que os dados a serem processados e os
mecanismos de processamento dos dados devem ser considerados em conjunto;
Motivação
A análise orientada a objetos baseia-se em conceitos
que começamos a aprender no jardim de infância:
objetos e atributos, classes e membros, o todo e suas
partes. Por que demorou tanto tempo para que
aplicássemos esses conceitos à análise e
desenvolvimento de sistemas de informação é uma coisa
que qualquer um pode adivinhar – talvez estivéssemos
ocupados demais "seguindo o fluxo"durante o apogeu
da análise estruturada para considerarmos alternativas –
Coad & Yourdon
Motivação
Código em C
int i , j , s o m a ; v o i d i n i t (int _i , int _j ) { s o m a = 0; i = _i ; j = _j ; } int s o m a I J () { s o m a += i * j ;} int ret () {r e t u r n s o m a ;} v o i d m a i n () { i n i t (3 ,2) ; s o m a I J () ; s o m a I () ; s o m a I J () ; }Modelo em UML
Soma i : int j : int soma : intinit(int, int) : void somaIJ() : int ret() : int
História da Orientação a Objetos
I SIMULA - 1aLinguagem Orientada a Objetos;
I Década de 70 surge a linguagem SmallTalk
(considerada até hoje única linguagem puramente orientada a objetos);
I Década de 80 − > Rápida evolução − > Surgimento
de Ada e C++
Mais um pouco de história
I O uso da Tecnologia de Objetos como
metodologiabásica para desenvolvimento de sistemas (abrangendo todo o ciclo ... desde análise até o código) é uma prática que passou a ser difundida na década de 80 com a publicação dos trabalhos do pesquisador Grady Booch.
I A tecnologia de objetos veio para ficar!
I Seus conceitos e técnicas imprimem maior
qualidade,produtividade e profissionalismo na construção de software.
Orientação a objetos é necessária?
I Nem sempre...
I Há situações onde o modelo de uma tarefa a ser
executada é tão simples que a criação de uma classe para representá-lo torna o problema mais complicado;
I Uma equação de segundo grau, por exemplo.
I Fórmula de Bhaskara – x = −b±
√ b2−4ac 2a
Código estruturado em C
# i n c l u d e < s t d i o . h >
# i n c l u d e < m a t h . h >
d o u b l e b a s c a r a X 1 (int a , int b , int c )
{
d o u b l e d e l t a = ( b * b ) -4*( a ) *( c ) ;
r e t u r n - b + s q r t ( d e l t a ) /2* a ;
}
d o u b l e b a s c a r a X 2 (int a , int b , int c )
{
d o u b l e d e l t a = ( b * b ) -4*( a ) *( c ) ;
r e t u r n - b - s q r t ( d e l t a ) /2* a ;
}
int m a i n (int argc , c h a r ** a r g v ) { p r i n t f (" X1 ␣ = ␣ \% f ", b a s c a r a X 1 (3 , -7 ,2) ) ; p r i n t f (" X2 ␣ = ␣ \% f ", b a s c a r a X 2 (3 , -7 ,2) ) ; r e t u r n 0; }
Código OO em Java
p u b l i c c l a s s B h a s k a r a { p r i v a t e int a , b , c ;B h a s k a r a (int a , int b , int c ) {
t h i s. a = a ; t h i s. b = b ; t h i s. c = c ; } p u b l i c d o u b l e b a s c a r a X 1 () { d o u b l e d e l t a = ( b * b ) -4 * a * c ; r e t u r n - b + M a t h . s q r t ( d e l t a ) /2* a ; } p u b l i c d o u b l e b a s c a r a X 2 () { d o u b l e d e l t a = ( b * b ) -4 * a * c ; r e t u r n - b - M a t h . s q r t ( d e l t a ) /2* a ; } p u b l i c s t a t i c v o i d m a i n ( S t r i n g a r g s []) { B h a s k a r a b = new B h a s k a r a (3 , -7 ,2) ; S y s t e m . out . p r i n t l n ( b . b a s c a r a X 1 () ) ; S y s t e m . out . p r i n t l n ( b . b a s c a r a X 2 () ) ; } }
Motivação
Orientação a objetos é necessária?
I Em muitas situações
I Imagine uma aplicação “mundo real” repleta de
janelas queapresentam as mesmas funcionalidades e se compõem de uma infinidade de outros controles gráficos que se repetem ao longo da aplicação (botões, caixas de texto, janelas de diálogo, etc.);
Motivação
Orientação a objetos é necessária?
I Imagine simular o movimento de espermatozoides a
procura de umóvulo utilizando a programação
estruturada normal de forma que cada célula (dentre as milhões) tenha atributos diferentes (velocidade, tamanho, agilidade, etc.)
Motivação
Papéis dos programadores OO
I Programador de Classes
I Criam novas classes;
I Tarefa mais abstrata e específica (não há
preocupação cominterface, por exemplo);
I Preocupação com questões de segurança;
I Deve prever a utilização da classe para
diferentesaplicações;
I Programadores Usuários
I Utilizam as classes disponíveis, combinando seus
POO
Motivação
Núcleo mínimo de uma linguagem OO
I Segundo Grady Booch: Coming of Age in an Object-OrientedWorld. IEEE Software 11(6): 33-41 (1994).
I Uma linguagem orientada a objetos deve oferecer:
I Abstração I Encapsulamento I Herança I Polimorfismo
Abstração
Abstração
I Habilidade de se concentrar nos aspectos essenciais de
um contexto qualquer, ignorando características menos importantes ou acidentais;
I Na POO, uma classe é uma abstração de entidades
O que é uma classe
I A classe é a unidade básica de trabalho em um
programa orientado a objetos;
I Representa um modelo abstrato a partir do qual são
criadas instâncias;
I É uma coleção de dados (atributos) e operações
O que é uma classe (continuação)
I A classe é a descrição de um tipo de objeto;
I Objeto está para classe da mesma forma que variável
está para tipo de dado.
I Que objetos poderiam ser descritos com essa classe?
Classe Data em UML
Data dia : int
mes : int ano : int
dataPorExtenso(int, int) : String calculaData(int, int, int) : int diaSemana() : String
O que compõe uma classe?
I Atributos
I São os dados (simples ou compostos) quecaracterizam
objetos daquela classe;
I São armazenadas em variáveis;
I Constituem o estado do objeto.
I Operações
I São os métodos (procedimentos ou funções)
Exemplo de Atributos
Código em C
p u b l i c c l a s s C a c h o r r o { p r i v a t e S t r i n g cor ; p r i v a t e b o o l e a n s a b e E s c r e v e r ; p u b l i c C a c h o r r o ( S t r i n g c , b o o l e a n se ) { cor = c ; s a b e E s c r e v e r = se ; }p u b l i c v o i d c o r r e r () {} p u b l i c v o i d l a t i r () { S y s t e m . out . p r i n t l n (" Au , ␣ au ") ; } p u b l i c v o i d e s c r e v e r () { if ( s a b e E s c r e v e r ) { S y s t e m . out . p r i n t l n (" Ola ") ; }Modelo em UML
Cachorro cor : String sabeEscrever : boolean correr() : void latir() : voidEncapsulamento
I Consiste na separação dos aspectos internos eexternos
de um objeto;
I É utilizado para impedir o acesso direto aoestado de
um objeto (seus atributos) disponibilizando apenas métodos para validar e efetivar suas alterações.
Encapsulamento
I Permite ignorar os detalhes de implementação (de
como as coisas funcionam internamente), podendo o desenvolvedor idealizar seu trabalho em um nível mais alto de abstração;
I É o termo formal que descreve a junção de métodos e
dados dentro de um objeto de maneira que acesso a estes dados só seja permitido por meio dos próprios métodos do objeto;
Exemplo: o telefone
I Ninguém precisa conhecer detalhes dos circuitos de um
telefone para utilizá-lo;
I Sua carcaça encapsula os detalhes e nos provê uma
interface amigável: botões, caixas de diálogo, sinais de tom, etc.
Exemplo: o colchão
I Ninguém está preocupadoem como o colchão foi
construído na hora de dormir;
I Basta ele oferecer umainterface amigável quetodos
Exemplo: um terminal bancário
I Se um banco reescrever osoftware (aperfeiçoando-o) ele
não precisa avisar todos os clientes ...
I A interface não mudou (oque mudou foram detalhes de
Herança (ou generalização)
I É o mecanismo pelo qual uma classe pode estender
outra aproveitando seus comportamentos (métodos) e estados possíveis (atributos);
I Permite que elementos mais específicos incorporem a
estrutura e o comportamento de elementos mais genéricos;
Herança (ou generalização)
I Quando um objeto da classe filho é criado ele herda
todas as propriedades da classe pai, além das propriedades definidas na própria classe filho;
I Animal: Mamífero, Réptil, Canino, Felino...
I O homem naturalmente pensa dessa forma:
É um tipo de ...
I Um objeto de uma subclasse (classe filha) éum tipo de
objeto da superclasse (classe pai);
I Um objeto “Poupança”, classe filha de “Conta”, por
exemplo, é um tipo de conta;
I Beagle É um tipo de Cachorro
Não é um tipo de ...
I Se um objeto de uma subclasse não possui todos os
atributos e operações da superclasse, ela (classe deste objeto) não pode ser uma subclasse
Polimorfismo
I Permite que uma mesma operação possa ser definida
para diferentes tipos de classes, e cada uma delas a implementa como quiser;
I Permite a um mesmo objeto se manifestar de diferentes
Polimorfismo (cont.)
I Princípio pelo qual duas ou mais classes derivadas de
uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de argumentos e tipo de retorno) mas com comportamentos distintos
(especializados em cada subclasse).
I A decisão sobre qual método deve ser selecionado, de
acordo com o tipo da classe derivada, é tomada em tempo de execução.
Embarque em um veículo
I Barcos, trens e caminhões são veículos que possuem
operações de embarque;
I Em cada tipo de veículo a operação de embarque é
Portas lógicas
I Uma porta lógica é um CI que encapsula operações
simples entre um, dois ou mais sinais elétricos. São exemplos:
I Essa atividade consiste em testar as interfaces de dois
circuitos eletrônicos integrado (CI 4081 e CI 4071) indicando ao final da tarefa que tipo de porta lógica eles implementam. A interface dos CD é a seguinte:
Comanda de um restaurante
I Imagine que você tenha sido contratado para modelar e
informatizar a comanda de um restaurante;
I Que tipo de informações seriam pertinentes armazenar
sobre a comanda?
I Que tipo de operações a comanda deveria oferecer a
Pessoa
I Tente abstrair modelos de pessoas para diferentes
situações;
I Um funcionário de uma empresa;
I Um paciente de um hospital;