Escolar Documentos
Profissional Documentos
Cultura Documentos
A Crise do Software I e II
Uma nova Filosofia Programao Estruturada Programao Orientada a Objetos
No comeo do uso de computadores: O custo da computao era o equipamento eletrnico. No fim dos anos 60 A crise do software (programao estruturada). Atualmente a situao se inverteu Computadores mais rpidos e baratos Tecnologia de software no apresentou um desenvolvimento comparvel
Problemas detectados na dcada de 60: baixa produtividade, falta de uma metodologia formal para o desenvolvimento de software, cdigos literalmente sem a possibilidade de serem mantidos.
1968, Dikjstra, lana os conceitos da Programao Estruturada (PE): no usar goto, estruturas bsicas de controle (sequncia, condio e repetio), subprogramao (ou modularizao), tipo abstrato de dados = modelo matmatico + operaes.
Subprogramao - ESTUDAR
Em geral: problemas complexos = programas complexos Mas sempre possvel dividir: problemas grandes e complicados em problemas menores e de soluo mais simples Programa complexo = Subprograma 1 + Subprograma 2 + ... + Subprograma N
Definio
Um subprograma, um nome dado a um trecho de um programa mais complexo e que, em geral, encerra em si prprio um pedao da soluo de um problema maior (o programa a que ele est subordinado). So sinnimos: Procedimento, Funo, Mdulo (estrutura modular), Mtodos (orientao a objetos) e Subrotina; so conceitos da cincia conhecida como engenharia de software.
Os subproblemas para os quais no for possvel encontrar uma soluo direta devem ser novamente subdivididos. Assim, o processo repetido at que se consiga encontrar um programa para solucionar cada um dos subproblemas definidos. Ento, o programa de soluo do problema original ser composto pela justaposio dos programas usados para solucionar cada um dos subproblemas em que o problema original foi decomposto.
Programao Estruturada
A linguagem C uma linguagem de programao estruturada
C++ a linguagem C orientada a objeto
medida que os programas vo se tornando maiores e mais complexos, possvel simplificar e melhorar a clareza do programa dividindo o programa em partes menores, chamadas funes.
Continuando...
TAD podem ser considerados generalizaes de tipos primitivos de dados, da mesma forma que procedimentos so generalizaes de operaes primitivas tais como adio, subtrao e multiplicao. Assim como um procedimento usado para encapsular partes de um programa, o tipo abstrato de dados pode ser usado para encapsular tipos de dados.
Neste caso a definio do tipo e todas as operaes definidas sobre ele podem ser localizadas em uma nica seo do programa.
Continuando...
Entretanto, sendo o TAD apenas um modelo matemtico, sua definio no leva em considerao como os valores sero representados na memria do computador (organizao dos bits), nem se preocupa com o tempo que ser gasto para aplicar as funes (rotinas) sobre tais valores.
Continuando...
Para que se possa realmente aplicar um modelo matemtico na resoluo de problemas por computador, preciso antes transform-lo em um tipo de dados concreto (ou simplesmente, tipo de dados).
Continuando...
A transformao de um tipo de dados abstrato em um tipo de dados concreto chamada implementao. durante o processo de implementao que a estrutura de armazenamento dos valores especificada, e que os algoritmos que desempenharo o papel das funes so projetados.
TIPO DE DADOS ABSTRATO (modelo matemtico) TIPO DE DADOS CONCRETO (padro de bits/rotinas)
IMPLEMENTAO
Continuando... Os dados so processados nos blocos e migram de um bloco para outro (variveis globais, parmetros passados por referncia e expresso retornada pela funo) A execuo caracterizada pelo acionamento do bloco Tipo abstrato de dados = modelo matemtico + operaes
Programao Estruturada
Dados
variveis globais parmetros passados por valor parmetros passados por referncia (var)
...
Modelo Matemtico
// Modelo matemtico das estruturas de dados // bsicas implementadas com vetores. // cada item da lista corresponde a um // registro (TipoItem) composto apenas // do campo nome struct TipoItem { char nome[30]; }; // tamanho mximo da lista const maxTam = 10; struct TipoLista { TipoItem Item[maxTam]; int Ultimo; }; struct TipoPilha { TipoItem Item[maxTam]; int Topo; }; struct TipoFila { TipoItem Item[maxTam]; int Frente; int Final; int Tamanho; };
Operaes
// Operaes realizadas no tipo Pilha implementada atravs de vetor. // Faz a 'Pilha' ficar vazia void FazPilhaVazia(TipoPilha *Pilha) { Pilha->Topo = -1; } // Esta funo retorna 1 (true) se a Pilha est vazia; seno retorna 0 (false) int PilhaVazia(TipoPilha *Pilha) { return(Pilha->Topo == -1); } // Insere o item 'x' no 'Topo' da 'Pilha'. int Empilha(TipoItem x, TipoPilha *Pilha) { if (Pilha->Topo == (maxTam - 1)) return(0); // Erro: Pilha Cheia ! else { Pilha->Topo = Pilha->Topo + 1; Pilha->Item[Pilha->Topo] = x; // item inserido no topo da pilha return(1); // Item inserido com sucesso } } // Retira o item x que est no topo da Pilha int Desempilha(TipoPilha *Pilha, TipoItem *x) { if (PilhaVazia(Pilha)) return(0); // Erro: Pilha vazia. else { *x = Pilha->Item[Pilha->Topo]; // item retornado Pilha->Topo = Pilha->Topo - 1; return(1); // Item retirado com sucesso } } void ImprimePilha(TipoPilha *Pilha) { TipoItem x; TipoPilha PilhaAux; FazPilhaVazia(&PilhaAux); clrscr(); while (!PilhaVazia(Pilha)) { Desempilha(Pilha, &x); printf("%s\n", x.nome); Empilha(x, &PilhaAux); // salva os itens desempilhados da 'Pilha' } // na 'PilhaAux' // retorna o itens para a pilha original (Pilha) while (!PilhaVazia(&PilhaAux)) { Desempilha(&PilhaAux, &x); Empilha(x, Pilha); } }
Necessidades atuais dos sistemas: produtividade e qualidade. Caractersticas atuais dos sistemas: complexidade, tamanho (milhes de linhas de cdigo).
Necessidades atuais do mercado e das empresas: competitividade. Soluo: Programao Orientada a Objetos (POO).
Dados
Cdigo Objeto 2 Dados Cdigo
Cdigo
atributos + mtodos
Vantagens da POO
Produtividade Desenvolvimento rpido Controle da complexidade Manutenibilidade Reutilizao de cdigos (herana) Menor custo para desenvolvimento e manuteno de sistemas
Produo de Software
Programao Estruturada
Elemento.Operacao;
double x = Math.random(); pilhaUm.empilha(x);
Em Resumo:
A OOA se preocupa em enxergar a estrutura do problema e decomp-la em entidades abstratas de classes e objetos, enquanto o OOD procura organizar e descrever essa estrutura sistematicamente em um modelo de objetos, e a OOP implementa essas estruturas assim modeladas em cdigo de computador.
modelo conceitual
Anlise Orientada a Objetos Decompor a estrutura do problema em entidades abstratas Programao Orientada a Objetos implementar as estruturas modeladas em cdigo de computador
public class Tartaruga { // Atributos, ou propriedades // Mtodos, ou operaes }
Tartaruga objTartaruga = new Tartaruga();
Concluso
Orientao a Objetos o futuro, e o futuro aqui e agora. Edward Yourdon hora de uma revoluo na forma de contruirmos software, .... A revoluo a programao orientada a objetos. Brad J. Cox Provavelmente o software do ano 2000 voc no estar desenvolvendo, voc estar herdando, conectando componentes e distribuindo o processamento.
Referncias
Textos da internet:
http://www.inf.ufsc.br/poo/ http://www.dca.fee.unicamp.br/courses/PooJava/
http://www.inf.ufsc.br/poo/
http://www.dca.fee.unicamp.br/courses/PooJava/
http://www.visionnaire.com.br/
Alguma Perdvida?
Obrigado Pela oportunidade! Grande abrao a todos Tenham um timo final de semana.