Você está na página 1de 64

Prof.

Marcus Fabio Galvo Facine


(mfacine@gmail.com) Uniesp. Ribeiro Preto (2013)

O que veremos nesta noite


Problemas na Produo de Software

A Crise do Software I e II
Uma nova Filosofia Programao Estruturada Programao Orientada a Objetos

Problemas na Produo de Software

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

Evoluo das Linguagens de Programao (LP) - ESTUDAR


A evoluo do Modelo de Objetos est intensamente ligada ao desenvolvimento das linguagens de programao. Foi com o aumento da tecnologia e da capacidade dos computadores que problemas mais complexos puderam ser resolvidos pela mquina.

Histrico da Evoluo das LP (1/2)


Dcada de 40, programao fsica linguagem de mquina Dcada de 50, programao lgica linguagens montadoras, assembler (ainda exigiam conhecimentos do hardware) linguagens de 1 gerao, abstrao do hardware, nfase em clculos Fortran, Algol 58, ...

Histrico da Evoluo das LP (2/2)


Dcada de 60, linguagens de 2 gerao, nfase nos dados Fortran, Algol 60, Cobol, LISP Dcada de 70, linguagens de 3 gerao, nfase na estruturao do cdigo PL/1, Fortran, Algol 68, Cobol Linguagem C Pascal (ferramenta de aprendizagem) Simula 67 (1 linguagem orientada a objetos e introduziu os conceitos de classes e herana)

A Crise do Software Parte I.

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.

Estruturas Bsicas de Controle


Sequncia, condio (ou seleo) e repetio formas de raciocnio intuitivamente bvias A legibilidade e compreenso de cada bloco de cdigo enormemente incrementada, proibindo o uso irrestrito de comandos de desvio (GOTO)

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.

Mtodo dos Refinamentos Sucessivos


uma sistemtica de abordagem til no projeto detalhado e na implementao de softwares. Partindo-se de um dado problema, para qual se deseja encontrar um programa de soluo, devese procurar subdividi-lo em problemas menores (subproblemas) e de soluo mais simples. Alguns destes problemas tero soluo imediata e outros no.

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.

Em Sntese: Mtodo dos Refinamentos Sucessivos


Dividir uma sub-rotina em outras tantas quantas forem necessrias, buscando uma soluo mais simples de uma parte do problema maior tcnica de programao estruturada dividir-para-conquistar

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.

Vantagens da Subprogramao ESTUDAR


Subdiviso de programas complexos: cada parte menor tem um cdigo mais simples; facilita o entendimento (partes independentes). Estruturao de programas: deteco de erros e documentao de sistemas.

Vantagens da Subprogramao ESTUDAR


Modularizao de sistemas: desenvolvimento por equipes de programadores; manuteno de software; reutilizao de subprogramas (bibliotecas de subprogramas, na linguagem C, sob a forma dos arquivos .h).

A questo : Reutilizao de Software ESTUDAR


Objetivo: Economia de tempo e trabalho. Princpio: Um conjunto de subprogramas destinado a solucionar uma srie de tarefas bastante corriqueiras desenvolvido e vai sendo aumentado com o passar do tempo, com o acrscimo de novos subprogramas.

A questo : Reutilizao de Software


Ainda em Princpio: A este conjunto d-se o nome de biblioteca. No desenvolvimento de novos sistemas, procura-se ao mximo basear sua concepo em subprogramas j existentes na biblioteca, de modo que a quantidade de software realmente novo que deve ser desenvolvido minimizada.

Tipos Abstratos de Dados, Segundo Ziviani


Um Tipo Abstrato de Dados (TAD) pode ser visto como um modelo matemtico, acompanhado das operaes definidas sobre o modelo. O conjunto dos inteiros acompanhado das operaes de adio, subtrao e multiplicao forma um exemplo de um TAD.

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.

Tipos Abstratos de Dados, Segundo Pereira


Um TAD formado por um conjunto de valores e por uma srie de funes que podem ser aplicadas sobre estes valores. Funes e valores, em conjunto, constituem um modelo matemtico que pode ser empregado para modelar e solucionar problemas do mundo real; servindo para especificar as caractersticas relevantes dos objetos envolvidos no problema, de que forma eles se relacionam e como podem ser manipulados.

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

Caracterstica da Programao Estruturada


Decomposio gradativa dos programas ao nvel fundamental (desenvolvimento TopDown) programao orientada a procedimentos blocos estruturados de programas (funes, ou mdulos) a comunicao entre os blocos se faz utilizando variveis globais e pela passagem de dados atravs de parmetros Continua...

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)

Bloco de Cdigo ________ ________ ________

Bloco de Cdigo ________ ________ ________

...

Bloco de Cdigo ________ ________ ________

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); } }

Tipo Abstrato de Dados Pilha (implementao usando vetores)

A Crise do Software Parte II.

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).

A Promessa para os Anos 90 (1/2)


Estamos passando por um momento nico na histria da computao. Existe uma Nova Ordem na computao. A influncia provocada na maneira de se desenvolver software ser imensa. O software ter que se ajustar a esta Nova Ordem em todos os aspectos. necessrio uma revoluo na maneira em que se constri software.

A Promessa para os Anos 90 (2/2)


Esta revoluo provavelmente vir de tcnicas de Orientao a Objetos (OO). A Programao Orientada a Objetos (POO) est para os anos 90 assim como a Programao Estruturada estava para os anos 80. OO considerado por vrios autores como a salvao para os problemas no desenvolvimento de software.

Uma Nova Filosofia

Uma Nova Filosofia (1/3)


Implementar em Computadores uma Abstrao do Mundo Real. Esta implementao feita mais especificamente com Classes. Classes e Objetos fazem parte da vida de todos.

Uma Nova Filosofia (2/3)


Objetos so instncias, ou exemplares, de Classes, que determinam quais informaes um objeto contm e como ele pode manipullas. Objetos so compostos de atributos e comportamentos. Um programa desenvolvido com uma linguagem de POO manipula estruturas de dados atravs de objetos da mesma forma que um programa em linguagem tradicional utiliza variveis. Dados e cdigos no so mais separados.

Uma Nova Filosofia (3/3)


Um dos grandes diferenciais da POO em relao a outros paradigmas de programao est no conceito de herana, mecanismo atravs do qual definies existentes podem ser facilmente reutilizadas, modificadas e estendidas. Juntamente com a herana deve ser enfatizada a importncia do polimorfismo, que permite selecionar funcionalidades que um programa ir utilizar de forma dinmica, durante sua execuo.

Em Resumo: Caracterstica da POO


dados e procedimentos fazem parte, ou so encapsulados, em um s elemento bsico chamado Classe os objetos so exemplares das classes a comunicao entre os objetos caracteriza a execuo do programa reutilizao de cdigo atravs de herana

Programao Orientada a Objetos


Entidades concretas, exemplares da classe (varivel) Entidade abstrata (tipo) Classe Dados Cdigo Objeto N Dados ... Objeto 1

Dados
Cdigo Objeto 2 Dados Cdigo

Cdigo

// Classe "Pilha.java public class Pilha { // corpo da classe


// atributos da classe private int n = 100, topo, vetor[]; // mtodo construtor (observe que o nome do mtodo tem o "mesmo" nome da classe). public Pilha() { topo = -1; vetor = new int[n]; } // protocolo de mtodos da classe public void empilha(int i) { if (topo == (n-1)) System.err.println("Erro: pilha cheia !"); else vetor[++topo] = i; } public int desempilha() { if (pilhaVazia()) { System.err.println("Erro: pilha vazia !"); return (-1); } else return (vetor[topo--]); } public boolean pilhaVazia() { // retorna verdadeiro se a pilha est vazia return (topo == (-1)); // falso caso contrrio } // mtodo destrutor (faz o vetor perder sua referncia de memria) protected void finalize() { vetor = null; } } // fim do corpo da classe "Pilha"

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 X Programao Orientada a Objetos

Programao Estruturada

Sob Perspectiva de um Subprograma.


Nessa viso, o principal bloco de construo do software o procedimento ou a funo. Essa perspectiva conduz desenvolvedores a voltar seu foco de ateno para questes referentes ao controle e decomposio de programas maiores em outros menores. Desvantagens, medida que os requisitos se modificam e o sistema cresce, ser difcil fazer a manuteno de sistemas.

Programao Orientada a Objetos

Sob Perspectiva de uma Classe.


Nesta viso, o principal bloco de construo de todos os sistemas de software o objeto ou a classe. Um objeto alguma coisa geralmente estruturada a partir do vocabulrio do espao do problema ou do espao da soluo; uma classe a descrio de um conjunto de objetos comuns.

Programao Estruturada void Operacao(TipoRegistro *Elemento); x = random(100); Empilha(x, &PilhaUm);

Programao Orientada a Objetos

Elemento.Operacao;
double x = Math.random(); pilhaUm.empilha(x);

Desafios do Modelo de Objetos


investimentos em nova tecnologia treinamento mudana de paradigma mudana na forma de conceber e programar sistemas resistncia dos programadores familiarizados com as tcnicas tradicionais

Fundamentos do Modelo de Objetos


Anlise Orientada a Objetos Object-Oriented Analysis (OOA) Projeto Orientado a Objetos Object-Oriented Design (OOD) Programao Orientada a Objetos Object-Oriented Programming (OOP)

Anlise Orientada a Objetos


um mtodo de anlise que examina requerimentos pelas perspectivas de classes e objetos encontrados no vocabulrio do domnio do problema. definir a abrangncia do problema a ser solucionado.

Projeto Orientado a Objetos


um mtodo de projeto, ou design, englobando o processo de decomposio orientada a objetos e uma notao para representar os modelos lgicos e fsicos bem como os modelos dinmicos e estticos do sistema projetado. Criar uma estrutura geral para o sistema.

Programao Orientada a Objetos


um mtodo de implementao em que programas so organizados como colees cooperativas de objetos, cada um representando uma instncia (exemplar) de alguma classe e cujas classes so membros de uma hierarquia de classes unidas via relacionamento de herana. Construo de sistemas a partir de componentes reutilizveis, chamados de classes.

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.

Fundamentos do Modelo de Objetos

Projeto Orientado a Objetos Apresentar, ou diagramar, o modelo dos objetos observados

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/

Visionnaire Consultoria em Informtica


http://www.visionnaire.com.br

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.

Você também pode gostar