Programação estruturada Generalidades Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Diagrama de blocos do HARDWARE de um PC TERMINAL CPU DISCO RÍGIDO ROM FLOPY-DISK RAM CD-ROM ENTRADA/SAÍDA Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-2 Diagrama de blocos do SOFTWARE Comandos Ferramentas de desenvolvimento Parte suficiente para os utilizadores Aplicação 1 Aplicação N Interface Aplicacional ( system calls / API ) Sistema O perativo Hardware (RAM,ROM,CPU,Periféricos) Interface com o utilizador ( cada aplicação tem a sua interface ). Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-3 Sistemas operativos • Mono utilizador – MSDOS • Desenvolvido pela Microsoft na década de 80, por encomenda da IBM, para correm em PC’s IBM compatíveis. • Baseado no CP/M e UNIX. • Actualmente está em declínio (felizmente para alguns !!!) – Windows 3.x. • Multi utilizador – – – – Unix (muito heterogéneos). Novell. OS/2. Windows NT. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-4 Alguns conceitos básicos de programação • Primeiras barreiras a ultrapassar : – Disciplinar raciocínio, por forma a traduzir algoritmicamente a solução do problema. • Algoritmo – Conjunto finito de regras sobre as quais se pode dar execução a um dado processo (Knuth73v1) • Exº ordenação de um conjunto, pesquisa numa base de dados. – Atributos que deve possuir: • Ser finito, inteligível, exequível, caracterizável. – Formas de representação : • Narrativa, Fluxograma, Pseudo código, Linguagens de programação. • Processo – Conjunto ordenado de acções, sujeitos a critérios de decisão condicionados por variáveis. – Executa as regras de um algoritmo, para atingir o seu objectivo. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-5 Representação dos algoritmos (1) Algoritmo de Euclides (geómetra grego ) desenvolvido em 600 AC. • Enunciado: – Dados dois inteiros m e n, encontrar o maior inteiro que os divida a ambos exactamente. • Descrição narrativa: – Algoritmo E (Algoritmo de Euclides) • E 1- (Encontrar o resto) - Dividir m por n e afectar r com o resto ( 0 <= r < n) • E 2 - ( O resto é zero?) - Se r=0, o algoritmo termina ; n é o valor procurado. • E 3 - (Substituir) - Afectar m com n e n com r, voltando ao passo E1. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-6 Representação dos algoritmos(2) Descrição em fluxograma MDC de m e n r =m % n n =r m = n Descrição em linguagem C++ int mdc(int m, int n) { int r; while ( (r= m % n) != 0) { m=n; n=r; } return n; } r =0 ? T RUE MDC = n FALSE m % n - significa resto da divisão inteira de m por n Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-7 Constituintes dos algoritmos •Parâmetros do processo ou entradas. •Variáveis intermédias (temporárias) •Índices de iteração •Acções primitivas. •Resultados finais ou saídas. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-8 Algoritmos e linguagens estruturadas O conjunto S normalmente adoptado envolve as primitivas: Ponto de entrada • Decisão binária: if (condição) acção1 else acção2 • Repetição condicional: while (condição) acção • Decisão múltipla : switch (expressão) { case expressão1: acção1 case expressão2: acção2 … S (conjunto de primitivas de controlo. p.e C++) } Um algoritmo diz-se estruturado em relação ao conjunto S se todo ele for explicitado exclusivamente com essas primitivas. Ponto de saída Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1-9 O que é programar ? Enquanto na literatura, a arte de escrever, revela-se na interligação das regras gramaticais, expressas numa dada língua (não bastando para isso dominar a gramática) ,na programação, a arte de programar, revela-se na concepção dos algoritmos, expressos numa dada linguagem. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 10 Linguagens e paradigmas de programação A evolução das linguagens pode analisar-se através dos paradigmas de programação que suportam. G e r a ç õ e s T e c n o ló g ic a s d o s c o m p u ta d o r e s Gerações de Linguagens Geração 1ª 2ª 3ª década Paradigmas de programação que suportam 50 e 60 Não estruturada ( Cobol, Fortran, Basic). G e ra ç ã o década 1ª 40 V á lv u la s e le c tró n ic a s 2ª 50 T ra n s ís to re s 70 Procedimental ( Pascal, linguagem C) 3ª 60 C irc u ito s in te g ra d o s d e p e q u e n a e m é d ia e s c a la . 4ª 70 C irc u ito s in te g ra d o s d e la rg a e m u ito la rg a e s c a la . 80 Modular ( modula II). 80 Abstracção de Tipos de Dados ( ADA). 5ª 4ª 5ª te c n o lo g ia 8 0 e 9 0 E s tru tu ra s d e p ro c e s s a d o re s . 80 e 90 Programação Orientada para Objectos ( Smalltalk, C++, JAVA). A evolução das linguagens de programação tem vindo a acompanhar as evoluções do Hardware. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 11 Paradigmas de programação (1) – Programação procedimental – decomposição de um problema em pequenos problemas (procedimentos) – cada procedimento utiliza os algoritmos mais adequados ao que se pretende realizar. – procedimentos suportados por um conjunto de primitivas de controlo. – Programação modular – suporta princípio do encapsulamento de dados. – programa dividido em módulos (ficheiros). – programa resulta da ligação (“link”) de vários módulos. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 12 Paradigmas de programação (2) • Abstracção de tipo de dados – Possibilidade de definição de tipos de dados novos semelhantes aos já existentes suportando cada um deles um conjunto novo de: – Operações já existentes sobrecarregadas (overload) para o novo tipo ( novas operações e métodos de acesso). – Tipo de objecto => CLASSE – Instância de uma classe => OBJECTO – Extensão natural aos tipos (classes) pré-definidos. Complexo a, b, c; a = 2.3; b = 1 / a; c = a + b * Complexo(1,2.3); c = c - ( ( a / 2 ) + 2 ); Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 13 Paradigmas de programação (3) Programação orientada por objectos – Definir as classes ou tipos de objectos que sejam necessários. – Munir essas classes com um conjunto completo de operações. – Explicitar as características comuns entre elas, através de mecanismos de herança. – Usar polimorfismo de métodos entre objectos de classes derivadas. Form {abstract} based color : int getPosition:Point move( Point ) contain( Point ) paint show hide PolyLine Rectangle vertices contain( Point ) paint addPoint( Point ) Circle end point contain( Point ) paint contain( Point ) paint Point 1 Triangle 2..* Legenda Classe Nome da classe No caso de não existirem características comuns entre classes de objectos, a programação por objectos degenera na abstracção de dados. radius : int x : int y : int 1 Herança Classe base atributo : tipo método( argumentos ) : tipo_de_retorno Classe derivada Agregação Classe A Nome Cardinalidade Classe B Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 14 A linguagem C++ – A linguagem C foi desenvolvida nos Laboratórios BELL em 1970 por B. W. Kernighan e D. M. Ritchie. – Em 1983, foi normalizada pela ANSI (American National Standards Institute), uma versão melhorada da linguagem C original, o standard ANSI C . – Em 1988, também nos Laboratórios BELL, Bjarne Stroustrup desenvolveu uma extensão à linguagem C ANSI, destinada a suportar todos os paradigmas de programação a que atrás nos referimos, e que tomou a designação de C ++. – O C++ vem acrescentar novas potencialidades à linguagem C: – Refinar conceitos de estruturação. – Facilitar o trabalho entre grandes equipas. – Maior reutilização de código. Programação em C++ Pimenta Rodrigues Pedro Pereira Manuela Sousa Generalidades 1 - 15