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: Santos, R., Introdução à Programação Oriendada a Objetos Usando Java. Rio de Janeiro: Campus, 2003. Página da Disciplina: www.cafw.ufsm.br/~bruno/disciplinas/poo Recomenda-se a utilização de um caderno e um pen-drive
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 Área de Variáveis ContaBancariaSimples - String nomedocorrentista; - float saldo; - char indccontaespecial; + abreconta(nome, depósito, indespecial) + abrecontasimples(nome) + deposita(valor) + retira(valor) + mostradados() + alteranometitular(novonome) Área de Atributos Área de Operações Fim Aplicação Conta1 Conta2 Conta3
Um pouco de história sobre POO 1967 Anos 70 Anos 80 Anos 90 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
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 #include <stdio.h> #include <math.h> public class Bhaskara { private int a, b, c; 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); 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[]) { } printf( X1 = %f", bascarax1(a, b, c)); printf( X2 = %f", bascarax2(a, b, c)); return 0; Código estruturado em C } } Bhaskara bascara = new Bhaskara(3,-7,2); System.out.println(bascara.solveX1()); System.out.println(bascara.solveX2()); 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. - dia : int; - mês : int; - ano : int Data Revolução Farroupilha dia = 20; mês = 9; ano = 1835; Independência do Brasil dia = 7; mês = 9; ano = 1822; + porextenso() : String; + diadasemana() : String; Classe Data Objetos da Classe Data Fundação da UFSM dia = 14; mês = 12; ano = 1960;
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... public class Cachorro { private String cor; private boolean sabeescrever; Atributos Métodos } 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"); } } Cachorro - cor : string - sabeescrever : boolean; + correr() : void; + latir() : void; + escrever() : void;
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; Canino Mamífero Animal Felino... Réptil... O homem naturalmente pensa dessa forma... Doméstico Selvagem... Perdigueiro Poodle
É 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; Beagle É um tipo de Cachorro 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;