============================ BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO ============================ DISCIPLINA: Sistemas de Informação II PROFESSOR: Ulrich Schiel CONTEÚDO 1) Linguagens de Programação: gerações 2) Linguagens de Programação: paradigmas 3) Linguagens de Programação: programação orientada a objetos 4) Orientação a Objetos - Conceitos e sistemas (Bancos de Dados, Interfaces, Sistemas Operacionais, linguagens...) 5) A Linguagem Unificada de Modelagem - UML 5) Análise e projeto de sistemas orientados a objetos (O Processo Unificado - RUP-Rational Unified Process) BIBLIOGRAFIA Jacobson, I., Booch, G., Rumbaugh, J. The Unified Software Development Process Booch, Grady / Rumbaugh, James / Jacobson, Ivar Uml - Guia Do Usuario Editora Campus Booch, Grady / Rumbaugh, James / Jacobson, Ivar Uml - Guia Do Programador Editora Campus C. Larman Utilizando UML e Padrões- Uma Introdução à Análise e ao Projeto Orientados a Objeto, Bookman (2000) B. COX Object-Oriented Programming: An Evolutionary Approch, Addison Wesley, 1986 J.D. FURLAN Modelagem de objetos através da UML, Makron Books, 1998 J. MARTIN Fourth Generation Languages, Prentice Hall, 1985 R. SEBESTA Concepts of Programming Languages, Benjamin Cummings, 1989 R. SETHI Programmin Languages – Concepts and Constructs, 2nd Edition, Addison Wesley, 1996 2 1) Linguagens de Programação: gerações 1ª GERAÇÃO - programação física, linguagens de máquina 0010 0010 0001 0011 1000 0100 0010 0001 0001 0010 0101 0100 1000 0110 2ª GERAÇÃO - Linguagens de baixo nível (Assembly, Autocoder) CLA ADD STO CLA ADD DIV STO C D Y A B Y X 3ª GERAÇÃO - Linguagens de alto nível Científicas - FORTRAN, Algol Comerciais - COBOL Universais - PL/I, ADA Sistemas - Pascal, Modula 2, C, C++, Java Especiais - SIMULA, LISP, SNOBOL, PROLOG, APL, RPG 4ª GERAÇÃO - O que no lugar do como (MANTIS, NATURAL, IDEAL, SQL, QBE) Incrementa/substitue comandos sequenciais por Formulários, interação por janelas, Gráficos Linguagens não-procedurais Geradores de aplicações Prototipagem Sistemas de Suporte a Decisão, Linguagens para aplicações específicas (finanças, robótica, CAD, pesquisa textual, etc.) 3 2) Linguagens de Programação: paradigmas COMPLETAS (Máquinas de Turing) - Pascal, COBOL, C,.... INCOMPLETAS (SQL, QBE) EXTENDIDAS (goto, ON, acesso a registradores, FORMAT, PICTURE, acesso direto, auto-modificação) PROCEDURAIS (IMPERATIVAS) Programa principal: seqüência de comandos e ações ORIENTADAS A OBJETOS Coleção de objetos que recebem mensagens Linguagens: Simula, SmallTalk, Eiffel, Oberon FUNCIONAIS Interpretador de expressões: Execução de funções Exemplo LISP: FATORIAL: (LAMBDA(N) (COND(EQUAL N 1) 1)(T(TIMES N (FATORIAL(SUB 1 N)))))) LÓGICAS Interpretador de expressões: verificação de relações um programa consiste de fatos e regras Ex PROLOG Casamento de padrões: SNOBOL COMBINAÇÕES: Imperativo+OO: ObjectPascal, TurboPascal, Modula 3, ObjectiveC, C++, Java 4 Funcional + OO: ObjectLisp, CLO Lógico + OO: ObjLog NÃO-PROCEDURAL (NOMAD, SQL, QBE, APL, RPG, L4G) LINEAR X BIDIMENSIONAL (monólogo X diálogo) LINGUAGENS DE FLUXO DE DADOS (DFD, HIPO, RPG) 5 PROTOTIPAGEM TIPOS DE APLICAÇÕES Computação pré-especificada (programação convencional) J.Martin Computação dirigida pelo usuário (prototipagem) Burns & Dennis ciclo-devida mista complexidade prototipagem incerteza 6 prototipagem Protótipos modelo vivo testes de hipóteses (de dados, relatórios, telas) testes de arquitetura “quick and dirty” (rápido e ruim) Usuário Problemas Analista Testes, uso Construção revisão Protótipo 7 PROTOTIPAGEM X CICLO-DE-VIDA (=eXtreme Programming ??) Análise de requisitos Projeto Implementação Testes Manutenção ciclo de vida tempo Análise de requisitos Projeto Implementação Testes Manutenção prototipagem 8 CONTEÚDO DE UM PROTÓTIPO 1) Definição Lógica Relatórios Telas Informações Funções Controles Interface 2) Definição física Banco de dados fluxo do sistema 9 TIPOS DE PROTOTIPAGEM s u = usuário p = projetista s = software h = hardware u h p Exploratória (usp) - prototipagem rápida Experimental (psh) Evolutiva (usph) Desempenho (uph) Organizacional (ush) 10 METODOLOGIAS DE PROTOTIPAGEM 1) Prototipagem evolutiva 1. exame de viabilidade do projeto 2. identificação dos requisitos 3. desenvolvimento do modelo vivo 4. demonstração e uso 5. revisão e melhoramentos 6. utilização 7. repetir 3-6 acima até terminar B) Prototipagem descartável 1-5 acima 6. elaboração do sistema real C) Prototipagem fundamental 1-5 acima 6. elaboração da documentação e implementação D) Prototipagem aplicada ao ciclo-de-vida 11 PROTOTIPAGEM EVOLUTIVA PROTOTIPAGEM FUNDAMENTAL PROTOTIPAGEM DESCARTÁVEL Exame de viabilidade Levantamento dos requisitos Desenvolvimento do protótipo Documentação e teste Revisão Codificação e teste porgramas Elaboração documentação Testes integrados Produto final Incorporação esquemas segurança Implantação 12 Documentação Implantação 3) Linguagens de Programação: programação orientada a objetos ORIENTAÇÃO A OBJETOS: Programação OO Linguagens OO Projeto OO Sistemas OO Bancos de Dados OO Interfaces OO Ambientes OO Paradigma da Orientação a Objetos: No mundo existem - Objetos (com estrutura e comportamento) - Mensagens entre objetos - Nada mais Novos paradigmas de software: Frameworks componentes 13 Por que POO ? Crise de Software Problemas: reusabilidade, capacidade de um programa em ser aproveitado para uma outra aplicação, semelhante à original; adaptabilidade, capacidade de um programa em se adaptar a novas situações novas; extensibilidade, capacidade de um programa em ser estendido incorporando novas funcionalidades. Prevenção de alterações - Linha Maginot: A assinatura do cliente proíbe alterações. Boa documentação, comentários e linguagem de alto nível não são suficientes. - Defesa suiça: Prototipagem, mudanças fazem parte vital do processo de desenvolvimento do sistema (ex. Smalltalk, Engª do conhecimento) Problemas: Eficiência, controle, compatibilidade (com sistemas existentes). 14 Sistemas devem ser: - maleáveis e elásticos em tempo de execução => acoplagem dinâmica (dynamic binding) - alteráveis e extensíveis => encapsulamento e hereditariedade - evitar efeitos colaterais. => encapsulamento (objeto = caixa preta) A POO enfatiza a relação entre produtor e consumidor de software. desenvolvimento convencional desenvolvimento O.O. consumidor -> produtor <-> código consumidor <-----> produtor ______________________ FOCO EM SISTEMA Programa ____objetos ______ FOCO EM OBJETO Classe Processos Atributos Dados Operações 15 Um dos objetivos da POO é reduzir a superfície de software O que influi na superfície de software: 1) Encobrimento da informação (encapsulamento, variáveis locais, etc.) reduz a superfície de software 2) Tipos Abstratos de Dados. Quanto mais concreto o dado, mais informação é necessária para especificar os argumentos de uma função. Reduz a superfície de software 3) Seqüência/paralelismo de operações: uma seqüência fixa aumenta a superfície; 4) “Garbage collection: A necessidade de reservar e liberar explicitamente os objetos, aumenta a superfície de software; 5) Domínios protegidos: uma estação de trabalho ou um processo, são domínios relativamente protegidos. Comunicam entre si por arquivos e mensagens. Reduz a superfície de software 6) Concorrência: Problemas concorrentes aumentam a superfície, pois a comunicação ocorre em duas dimensões: tempo e espaço. 16 Origens da POO: - Tipos abstratos de dados Sintaxe (interface) Especificação Semântica (axiomas) Tipos abstratos de Dados Implementação Representação Procedimentos EXEMPLO: Os números inteiros: Sintaxe: Elementos: 0, 1, 2, 3, ..9, 10, 11,... Operações: +, -, *, Semântica: 0 N Função de criação p: N N sendo N = {0, p(0), p(p(0)), p(p(p(0))), ...} = {0, 1, 2, 3, 4, ..} n N (n+ 0 = n n + 1 = p(n)) Representação: números binários limitados Procedimentos: aritmética computacional de inteiros 17 - Bancos de Dados (modelos semânticos de dados - abstrações) generalização-(herança); agregação; agrupamento EXEMPLO: FAMILIA HOMEM PESSOA MULHER FILHOS - Inteligência Artificial - (frames, modelos de atores, redes semânticas, ontologias) 18 Principais características da Programação Orientada a Objetos 1) Objetos e Classes Um objeto é uma unidade identificável e distinguível de outros objetos. Objetos são compostos por - uma identificação; - uma estrutura, (atributos e relacionamentos) e - um comportamento (métodos e regras de integridade). h1 casar-com(m1) m1 casado-com nome: 'João' estado-civil casar-com(h1) casar-com(m) divorciar-se-de(m) nome: 'Maria' estado-civil casar-com(h) divorciar-se-de(h) Objetos são os únicos elementos primários de uma aplicação. Se comunicam entre si trocando mensagens. 19 CLASSIFICAÇÃO Uma classe é a descrição das características de uma coleção de objetos semelhantes. HOMEM nome:STRING estado-civil:INTEGER casar-com(m) divorciar-se-de(m) 20 2) Encapsulamento O usuário de um objeto (consumidor) somente vê a sintaxe da especificação, que são os nomes do métodos de acesso ao objeto. novo Elem empilha estrutura dos dados topo desempilha consumidor produtor/fornecedor 3) Objetos complexos, objetos compostos AUTOMÓVEL = (MOTOR, CARROCERIA, ESTOFAMENTO) CARROCERIA = ({RODA}, BASE, CARCAÇA, INTERIOR) AUTOMÓVEL MOTOR CARROCERIA ESTOFAMENTO 4 RODA 21 4) Hierarquias de generalização: classes com herança Fatoração de dados e procedimentos VEICULO tamanho ambiente VEICULO TERRESTRE VEICULO PEQUENO VEICULO AÉREO VEICULO MEDIO VEICULO GRANDE VEICULO AQUATICO NAVIO 22 5) Polimorfismo (Amarração dinâmica) EXEMPLO: Sistema de automação de escritório, com objetos Calendário, Arquivo, Envelope, mesa, Clipe, CaixaES, ListaDePreços,.. Na CaixaES haverá um método que processa um ítem colocado na caixa. código não reusável item = nextItemInCaixa(); switch(item type) { case ListaPreços opLiP(); case Envelope opEnv(); .} código reusável item = nextItemInCaixa(); [item opItem]; 6) Identificação de objetos x=y xy OO = TAD + Herança [ + Identificação ] TAD = Estrutura + Comportamento [ + Restrições } Comportamento = Especificação + Implementação Herança = herança estrutural + herança comportamental 23 TÉCNICAS DE EMPACOTAMENTO E COMUNICAÇÃO 1) Canais e filtros UNIX Alta reusabilidade de pequenos pacotes. Comunicação primitiva (bytes) 2) Biblioteca de subroutinas Comunicação com estruturas complexas, mas fortemente tipadas. 3) Objetos (CIs de software) Comunicação com estruturas complexas, parametrizadas. Polimorfismo. Exemplo: Contagem do número de palavras de um texto dado, sem repetições Canais e Filtros tr -cs ‘A-Za-z0-9’ ‘\012’ sort -u wc -l POO (ObjectiveC) palUnicas = [ Set new] /* inicializa um conjunto vazio *? while (getWord(buf) != EOF) /* lê uma palavra para o buffer *? { palCorrente = [ByteArray str:buf]; /* palavra corr. é um array de bytes */ [palUnicas add:palCorrente]; /* acrescente pal. corrente ao conjunto*/ } printf('o número de palavras únicas é %d\n', [palUnicas size]); Programação com subrotinas (C): 100 linhas de código 24 ALGUMAS LINGUAGENS DE PROGRAMAÇÃO ORIENTADA A OBJETOS 1) Turbo Pascal 5.5 type Localização = object X, Y : integer; procedure Init(novoX, novoY:integer) end; Ponto = object(localização) visível: boolean; procedure Init(IX,IY : integer) end procedure Localização.Init(novoX, novoY : integer) begin X := novoX; Y := novoY end procedure Ponto.Init(IX, IY : integer) begin Localização.Init(IX, IY); visível ::= FALSE end var meuPonto : Ponto; /* alternativa 1 */ begin with meuPonto do X := 341; Y := 42; visível := FALSE end end /* alternativa 2 */ begin meuPonto.Init(341, 42) end 25 2) Object Pascal (Delphi) unit Localizacao; type TLocalizacao = class(Tform) private x: real; y: real; {protected} public procedure init(var a, b:real); function getx : real; procedure setx(var a:real); implementation procedure TLocalizacao.init(var a, b:real); begin x:= a; y:=b; end; end. unit Ponto; uses Localizacao; type TPonto = class (TLocalizacao) private visivel:boolean; public procedure init(var a, b:real); override; implementation procedure TPonto.init(var a, b:real); begin inherited init(a,b); visivel := false; end; end. ................... var p1, p2:TPonto; vx:real: 26 p1:= TPonto.create(nil); p1.init(2,5); vx := p1.getx p1.free; 27 3) JAVA Public class Location{ Float x,y; Location(float x, float y){ This.x=x; This.y=y; } } public class Ponto extends Location{ boolean visible; Ponto(float x, float y){ Super(x,y); Visible=false; } public void setPoint(float a, float b){ x=a; y=b; } CRIACAO DE UM OBJETO DO TIPO PONTO: Ponto p = new Ponto(2,4) Criado um objeto p do tipo Ponto com coordenadas iniciais p(2,4) p.setPoint(3,6) Modificacao dos valores antigos de p(2,4) para (3,6) 28 4) Ada package GeometriaBidimensional is type vector is record x : integer; y : integer; end record; function “+” (a,b) : in vector) return vector; function “-” (a,b) : in vector) return vector; end GeometriaBidimensional; package body GeometriaBidimensional is function “+” (a,b) : in vector) return vector is begin .......código end function “-” (a,b) : in vector) return vector is begin .......código end with GeometriaBidimensional; destino, origem, extensão : vector; soma, a : integer; ...... destino = origem + extensão; soma = a + 2; 29 5) SmallTalk Exemplos de comandos: agenda imprimir index max:limite vetor em:pos colocar:elemento /* vetor(pos) := elemento */ elemento := vetor at:pos /* elemento := vetor(pos) */ dia + 4 cond ifTrue[bloco A] ifFalse{bloco B] [i<10] whileTrue [ sum := sum + (a at:i) i := i+1] x to y do:[bloco] 100 timesRepeat:[i := i+1 . i imprimir] 30 class Ponto superclass Object class variables phi instance variables x y class methods novoPonto X:valorX Y:valorY || self new X : valorX Y : valorY definirPhi || phi := 3.1416 instance methods + outroPonto || Ponto novoPonto X : self.X + outroPontoX Y : self.Y + outroPontoY Cálculo do Fatorial: fatorial self = 0 ifTrue:[1]. self < 0 ifTrue [self error: ‘receptor não deve ser negativo’] ifFalse :[self * (self-1) fatorial]. 31 C++ CLASSE COM FUNÇÕES CLASSE COM AMIGAS ENCAPSULAMENTO class data { class data { int dia, mês, ano; public int dia, mês, ano; public friend void novaData(data*,int,int,int); void nova(int,int,int); friend void proxData(data*); void prox(); friend void proxHoje(); void mostre(); friend void mostreData(data*); } } main() { main() { data meuAniv, hoje; data meuAniv, hoje; int d, m, a; int d, m, a; get(d, m, a); get(d, m, a); novaData(&meuAniv, 12, 09, 1955); meuAniv.nova(12, 09, 1955); novaData(&hoje, d, m, a); hoje.nova(d, m, a); proxHoje(); hoje.prox(); 32 Subclasses em C++ (classes derivadas) class figura { vetor centro; int cor; figura *prox; public void mova(vetor); vetor aonde() /* retorna o local da figura */ virtual void desenhe(); }; class circulo : public figura { float raio; public void rotacao(int); void desenhe(); } Construtores e destrutores class string{ int comprimento; char *bytes; public string(char*) /* construtor de strings */ ~string() /destrutor de strings */ } 33 Questões abertas da Orientação a Objetos 1) O que é um objeto ?? estático abstrato : números, strings, cores, salários, nomes uma universidade, um relacionamento concreto: pessoa, máquina, nota fiscal, uma janela (do monitor), um prego (?), uma molécula (?) dinâmico evento curto, evento longo, operação, transação controle: restrição, regra de dedução, regra de produção sem formato: fatos (‘João quebrou a perna ontem na viagem’), textos, subtextos, imagens, etc. intenção: esquema, subesquema, classe, contexto, categoria 2) Identificação de objetos questão conceitual ou de implementação ?? 34 3) Hierarquias de objetos Generalização - herança conceitual X estrutural herança múltipla identificação Agregação Agrupamento herança seletiva 4) Projeto de sistemas projeto orientado a objetos projeto orientado a processos projeto orientado a controle 35 4) Sistemas orientados a objetos Bancos de Dados Orientados a Objetos Os 13 mandamentos dos Bancos de Dados Orientados a Objetos: 1. Objetos complexos (conjuntos, agregados, listas) 2. Identidade de objetos (a=b e ab) 3. Encapsulamento 4. Tipos e/ou classes (tipos checagem; classes extensão) 5. Hierarquias e herança 6. Polimorfismo (amarração dinâmica, sobreescrita) 7. Linguagem computacionalmente completa 8. Extensibilidade 9. Persistência 10. Sistema de gerência de arquivos 11. Concorrência 12. Recuperação 13. Ambiente de consultas 36