Upload
dinhhanh
View
216
Download
2
Embed Size (px)
Citation preview
Programação Orientada a Objetos
(DPADF 0063) Aula 1 – Motivação e Introdução
Universidade Federal de Santa Maria
Colégio Agrícola de Frederico Westphalen
Curso Superior de Tecnologia em Sistemas para Internet
Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno
Objetivos
• Capacitar o aluno a implementar
algoritmos para a solução de problemas
computacionais em uma linguagem de
programação orientada a objetos.
Programa
• Unidade 1 – Orientação a Objetos (OO)
▫ Conceitos de OO: abstração, classes, objetos, encapsulamento,
herança e polimorfismo.
▫ Introdução à programação OO.
• Unidade 2 – Implementação em Java
▫ Fundamentos da linguagem Java.
▫ Implementação de classes em Java. Interação entre objetos.
▫ Reaproveitamento de código. Manipulação de coleções de objetos.
▫ Desenvolvimento de interfaces gráficas através da API Swing.
▫ Tratamento de exceções.
▫ Conexão com bancos de dados através da API JDBC. Applets.
Threads.
Material de Aula
• Livro Texto:
• Página da Disciplina:
www.cafw.ufsm.br/~bruno/disciplinas/poo
• Recomenda-se a utilização de um caderno e um pen-drive
Santos, R., Introdução à Programação
Oriendada a Objetos Usando Java.
Rio de Janeiro: Campus, 2003.
Avaliação (individual)
• Avaliação 1 (50% do semestre)
▫ Sistematização 1 (Peso 3)
▫ Trabalho 1 (Peso 2)
• Avaliação 2 (50% do semestre)
▫ Sistematização 2 (Peso 3)
▫ Trabalho 2 (Peso 2)
Programação Orientada a Objetos
(DPADF 0063) Aula 1 – Motivação e Introdução
Universidade Federal de Santa Maria
Colégio Agrícola de Frederico Westphalen
Curso Superior de Tecnologia em Sistemas para Internet
Prof. Bruno B. Boniati – www.cafw.ufsm.br/~bruno
Programação Orientada a Objetos
Sequência de Passos x Modelos
• Programação como sequência de passos
▫ Paradigma tradicional onde um problema é
resolvido a partir de um início e fim bem definidos
e eventualmente dividido em sub-rotinas;
• Programação utilizando-se de objetos
▫ 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;
A análise Orientada a Objetos baseia-se em conceitos que
começamos a aprender no jardim da 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
Sequência de Passos x Objetos
• Sequência de passos
• Objetos
Início
Fim
Área de
Variáveis - String nomeDoCorrentista;
- float saldo;
- char indCcontaEspecial;
+ abreConta(nome, depósito, indEspecial)
+ abreContaSimples(nome)
+ deposita(valor)
+ retira(valor)
+ mostraDados()
+ alteraNomeTitular(novoNome)
ContaBancariaSimples
Conta1
Conta2
Conta3
Área de
Atributos
Área de
Operações
Aplicação
Um pouco de história sobre POO
• SIMULA - 1ª Linguagem Orientada a Objetos;
• Década de 70 surge a linguagem SmallTalk
(considerada até hoje única linguagem puramente
orientada a objetos);
• Década de 80 ... Rápida evolução ... Surgimento
de Ada e C++
• Década de 90 ... Java
1967
Anos 70
Anos 80
Anos 90
Mais um pouco de história ...
• O uso da Tecnologia de Objetos como metodologia
bá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.
• A tecnologia de objetos veio para ficar!
• Seus conceitos e técnicas imprimem maior qualidade,
produtividade e profissionalismo na construção de
software.
Orientação a objetos é necessária?
• Nem sempre ...
• 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 ...
• Uma equação de segundo grau, por exemplo ...
Fórmula de Bhaskara
Bhaskara ... Estruturado x OO public class Bhaskara {
private int a, b, c;
Bhaskara(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
public double solveX1() {
double delta = (b*b)-4*(a)*(c);
return -b + Math.sqrt(delta) / 2*a;
}
public double solveX2() {
double delta = (b*b)-4*(a)*(c);
return -b - Math.sqrt(delta) / 2*a;
}
public static void main (String args[]) {
Bhaskara bascara = new Bhaskara(3,-7,2);
System.out.println(bascara.solveX1());
System.out.println(bascara.solveX2());
}
}
#include <stdio.h>
#include <math.h>
double bascaraX1(int a, int b, int c) {
double delta = (b*b)-4*(a)*(c);
return -b + sqrt(delta) / 2*a;
}
double bascaraX2(int a, int b, int c) {
double delta = (b*b)-4*(a)*(c);
return -b - sqrt(delta) / 2*a;
}
int main(int argc, char** argv)
{
int a, b, c;
printf("Digite a, b e c ... \n");
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
printf(“X1 = %f", bascaraX1(a, b, c));
printf(“X2 = %f", bascaraX2(a, b, c));
return 0;
}
Código estruturado em C Código orientado a objetos em Java
Orientação a objetos é necessária?
• Em muitas situações ...
• Imagine uma aplicação “mundo real” repleta de janelas que
apresentam 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 ...);
• 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 ...)
Papéis dos programadores OO
• Programador de Classes
▫ Criam novas classes;
▫ Tarefa mais abstrata e específica (não há preocupação com
interface, por exemplo);
▫ Preocupação com questões de segurança;
▫ Deve prever a utilização da classe para diferentes
aplicações;
• Programadores Usuários
▫ Utilizam as classes disponíveis, combinando seus objetos e
criando aplicações;
Conceitos Fundamentais
Núcleo mínimo de uma linguagem OO
• Segundo ...
▫ Grady Booch: Coming of Age in an Object-Oriented
World. IEEE Software 11(6): 33-41 (1994).
• Uma linguagem orientada a objetos deve oferecer:
Abstração
Encapsulamento
Herança
Polimorfismo
Classes x Objetos
Abstração
• Habilidade de se concentrar nos aspectos
essenciais de um contexto qualquer, ignorando
características menos importantes ou
acidentais;
• Na POO, uma classe é uma abstração de
entidades existentes no domínio do sistema de
software;
O que é uma classe
• A classe é a unidade básica de trabalho em um
programa orientado a objetos;
• Representa um modelo abstrato a partir do
qual são criadas instâncias;
• É uma coleção de dados (atributos) e
operações (métodos) que manipulam tais
dados
O que é uma classe (continuação)
• A classe é a descrição de um tipo de objeto;
• Objeto está para classe da mesma forma que
variável está para tipo de dado.
Data
- dia : int;
- mês : int;
- ano : int
+ porExtenso() : String;
+ diaDaSemana() : String;
Classe Data
Independência
do Brasil
dia = 7;
mês = 9;
ano = 1822;
Revolução
Farroupilha
dia = 20;
mês = 9;
ano = 1835;
Fundação da
UFSM
dia = 14;
mês = 12;
ano = 1960;
Objetos da
Classe Data
O que compõe uma classe
• Atributos
▫ São os dados (simples ou compostos) que
caracterizam objetos daquela classe;
▫ São armazenadas em variáveis;
▫ Constituem o estado do objeto.
• Operações
▫ São os métodos (procedimentos ou funções) que
manipulam os dados;
Exemplo de classe ...
Cachorro
- cor : string
- sabeEscrever : boolean;
+ correr() : void;
+ latir() : void;
+ escrever() : void;
public class Cachorro {
private String cor;
private boolean sabeEscrever;
public Cachorro(String c, boolean se) {
cor = c;
sabeEscrever = se;
}
public void correr() {}
public void latir() {
System.out.println("Au, au");
}
public void escrever() {
if (sabeEscrever) {
System.out.println("Ola");
}
}
}
Atributos
Métodos
Ocultação de informações
Encapsulamento
• Consiste na separação dos aspectos internos e
externos de um objeto;
• É utilizado para impedir o acesso direto ao
estado de um objeto (seus atributos) ...
disponibilizando apenas métodos para validar e
efetivar suas alterações.
Encapsulamento (cont.)
• Permite ignorar os detalhes de implementação
(de como as coisas funcionam internamente)
permitindo ao desenvolvedor idealizar seu
trabalho em um nível mais alto de abstração;
• É 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;
O telefone ...
• Ninguém precisa conhecer
detalhes dos circuitos de
um telefone para utilizá-lo;
• Sua carcaça empasula os
detalhes e nos provê uma
interface amigável ...
botões, monofone, sinais
de tom ...
O colchão ...
• Ninguém está preocupado
em como o colchão foi
construído na hora de
dormir;
• Basta ele oferecer uma
interface amigável que
todos saberão o que fazer
com ele.
Um terminal bancário ...
• Se um banco reescrever o
software (aperfeiçoando-o)
ele não precisa avisar
todos os clientes ...
• A interface não mudou (o
que mudou foram detalhes
de implementação ...)
Conceitos Fundamentais
Herança (ou generalização)
• É o mecanismo pelo qual uma classe pode
estender outra aproveitando seus
comportamentos (métodos) e estados
possíveis (atributos);
• Permite que elementos mais específicos
incorporem a estrutura e o comportamento de
elementos mais genéricos;
Herança (ou generalização)
• 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;
• O homem naturalmente
pensa dessa forma ...
Animal
Mamífero
Canino
Doméstico
Perdigueiro Poodle
Selvagem...
Felino...
Réptil...
É um tipo de Cachorro Beagle
É um tipo de ...
• Um objeto de uma subclasse (classe filha) é
um tipo de objeto da superclasse (classe pai);
• Um objeto “Poupança”, classe filha de “Conta”,
por exemplo ... É um tipo de conta;
Lancha
É um tipo de veículo
Não é um tipo de ...
• Se um objeto de uma subclasse não possui
todos os atributos e operações da superclasse,
ela (classe deste objeto) naõ pode ser uma
subclasse
Gato não é coelho!
Várias formas
Polimorfismo
• Permite que uma mesma operação possa ser
definida para diferentes tipos de classes, e cada
uma delas a implementa como quiser;
• Permite a um mesmo objeto se manifestar de
diferentes formas;
Polimorfismo (cont.)
• 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).
• 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
• Barcos, trens e caminhões são veículos que possuem
operações de embarque ...
• Em cada tipo de veículo a operação de embarque é
diferenciada ...
Exercícios para fixação
Portas lógicas
• Uma porta lógica é um CI que encapsula operações simples entre
um, dois ou mais sinais elétricos. São exemplos:
• 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
• Imagine que você tenha sido contratado para modelar e
informatizar a comanda de um restaurante; ▫ Que tipo de informações seriam pertinentes armazenar sobre a
comanda?
▫ Que tipo de operações a comanda deveria oferecer a seus
utilizadores?
Pessoa
• Tente abstrair modelos de pessoas para diferentes
situações ... ▫ Um funcionário de uma empresa;
▫ Um paciente de um hospital;
▫ Um aluno de uma universidade;