3/2/2016 Programação Modular Alessandro Garcia DI/PUC-Rio Março 2016 Programação Modular • Quem sou eu? Quem são vocês? • Qual é o problema abordado no curso? • Qual é o objetivo do curso? • Organização: aulas, avaliação - provas e trabalhos, etc... • Slides adaptados de: Staa, A.v. Notas de Aula em Programacao Modular; 2008. Mar 2009 Alessandro Garcia © LES/PUC-Rio 2 / 18 1 3/2/2016 Quem sou eu? • Prof. Alessandro Garcia, [email protected] – Sala RDC 506 • Iniciei atividades em Computação em fevereiro de 1992 – Programador em Cobol e Pascal: 1992 – 1993 – Graduação (Pascal e C): 1994 – 1998 • Mestrado em C. Computação, UNICAMP, 1998 - 2000 – Tema: “Tratamento de Exceções para Sistemas Concorrentes” • Uso de reflexão computacional: Guaraná – extensão da MV de Java • Prêmio da SBC em 2000 • IBM, San Jose, EUA: arquitetura e programação do TSpaces • PhD em C. Informática pela PUC-Rio, em cooperação com: – University of Waterloo, Canadá, 2000-2004 – Tese: “Programação Orientada a Aspectos para Sistemas Multiagentes” • Professor, Ciência da Computação – Lancaster University, Inglaterra, 2005 – Jan 2009 • Sétimo ano lecionando na PUC-Rio... Alessandro Garcia © LES/PUC-Rio Mar 2009 3 / 18 Áreas de Atuação e Projetos Desenvolvidos • Áreas de pesquisa – Técnicas avançadas de programação modular • Ex.: programação orientada a aspectos • novos mecanismos de tratamento de exceções – Manutenção de software, ex.: medição de software e detecção automática de anomalias de modularidade • Alguns projetos realizados – Sistema de controle de alunos e disciplinas (UEM) – Mecanismo reflexivo modular de tratamento de exceções (Unicamp) – TSpaces: arquitetura distribuída e tolerante à falhas de espaços de tuplas (IBM) • e várias aplicações embarcadas – Linha de produto para gerência de dados em dispositivos móveis (projeto com SAP/Siemens) – Plataforma de desenvolvimento orientada a modelos (projeto com Marinha do Brasil) – ... Mar 2009 Alessandro Garcia © LES/PUC-Rio 4 / 18 2 3/2/2016 Por que mencionar tudo isso? • Não se percebe a necessidade de programação modular sem experiência com projetos de média e larga escala – À priori, princípios desta disciplina podem não parecer importantes – Portanto: a disciplina consiste de trabalhos práticos • Sem raciocínio e projeto cuidadoso não se desenvolve software de porte razoável – decomposição em partes bem definidas (módulos) – princípios: interfaces explícitas, separação de interesses, etc... • Um dos objetivos do curso é capacitar os alunos a usarem técnicas de modularidade adequadas ao desenvolvimento de software reutilizável, manutenível e confiável – teste, documentação, modelos, assertivas, tratamento de exceções, métricas – inspeção, instrumentação, estratégias de cobertura de teste, etc... Alessandro Garcia © LES/PUC-Rio Mar 2009 5 / 18 Professores envolvidos… • Prof. Alessandro Garcia responsável desta turma ([email protected]) • Alexander Lopes – Monitoria • Dúvidas de aulas e trabalhos: por email • Outra turma: Flavio Bevilacqua Mar 2009 Alessandro Garcia © LES/PUC-Rio 6 / 18 3 3/2/2016 Quem são vocês? • Nome? • Período? • Curso? Ênfase? • Já experiência com Programação OO? • Trabalha? Estagiário? Envolvimento prévio com projetos de software? Mar 2009 Alessandro Garcia © LES/PUC-Rio 7 / 18 O que é programação modular? • Programação Modular (PM) é a base para se desenvolver programas de porte médio a muito grande a partir da garantia de qualidade de cada um dos módulos • Estratégia básica: particionamento sistemático do programa em módulos (ex. agregado de funções) de tal forma a: – facilitar a manutenção de software • software, cada vez mais, é desenvolvido de forma incremental – possibilitar o reuso de módulos já desenvolvidos – possibilitar o trabalho em equipe – facilitar a gerência do desenvolvimento Mar 2009 Alessandro Garcia © LES/PUC-Rio 8 / 18 4 3/2/2016 O que é programação modular? • Quais são os outros elementos importantes da programação modular? – necessidade de atitude visando produzir módulos isentos de defeitos • exemplo: não somente casos de teste para demonstrar que funções funcionam nos casos triviais – cada módulo deve ser desenvolvido com o devido cuidado • seguir convenções apropriadas de programação – além dos princípios de modularidade – ... também é importante que padrões de nomes e estruturação sejam seguidos • Caso contrário: – software dificilmente atingirá nível de qualidade satisfatório – custo do software será mais alto Mar 2009 Alessandro Garcia © LES/PUC-Rio 9 / 18 Pré-requisitos esperados • Conhecimento da Linguagem C • Estruturas de dados – básicas: ex. vetores e listas – árvores e grafos: não são pré-requisitos obrigatórios, mas os trabalhos podem exigir (já que a coleta de novos requisitos faz parte dos objetivos do trabalho/disciplina) • vários exemplos em sala de aula são baseados nestas estruturas • Saber utilizar as ferramentas de desenvolvimento – P.e. Visual Studio da Microsoft – janela de linha de comando Mar 2009 Alessandro Garcia © LES/PUC-Rio 10 / 18 5 3/2/2016 Problema abordado no curso • Como desenvolver um programa complexo tendo certeza que de fato funcionará e será de qualidade? – definir o que é esperado (especificar) – organizar a solução em temos de módulos e interfaces bem definidos (arquitetura) – Decompor e programar cada módulo em funções e dados (projeto detalhado e implementação) – assegurar continuamente a corretude • saber ler e criticar o código sendo lido inspeções • testar de forma sistemática – automatizar os testes Mar 2009 Alessandro Garcia © LES/PUC-Rio 11 / 18 Os deveres do aluno • Ler o documento “Apresentação da Disciplina” ... • Dedicar-se aos trabalhos práticos da disciplina – não deixar para a última hora – ser autodidata quando necessário • coleta de requisitos (ex. “novas” estruturas de dados) • Assinar as listas de presença • Comparecer nas aulas – para os ausentes: não serão tiradas dúvidas sobre conceitos básicos já explicados em sala de aula • Fazer os exercícios dados em sala de aula • Entender como trabalhar em equipe – respeitar os companheiros – mas lembre: devem trabalhar com a hipótese que desentendimentos podem ocorrer e devem ser solucionados Mar 2009 Alessandro Garcia © LES/PUC-Rio 12 / 18 6 3/2/2016 Livro texto • Staa, A.v.; Programação Modular; Rio de Janeiro: Campus; 2000 – não é necessário adquirir, mas obviamente ajuda • Texto complementar – algum livro que trate de programação usando a linguagem “C” Alessandro Garcia © LES/PUC-Rio Mar 2009 13 / 18 Convivência • Pontualidade – início as aulas, no máximo, às 13:15 • Sua participação é importante – espero que sejam feitas perguntas – sempre perguntas podem ser feitas – levante o braço antes de fazer sua pergunta Mar 2009 Alessandro Garcia © LES/PUC-Rio 14 / 18 7 3/2/2016 Organização • Seqüência das aulas: página 7 • Toda a comunicação deverá ser feita eletronicamente – e-mail: [email protected] • Sítio (site) da disciplina: www.inf.puc-rio.br/~inf1301 – notas de aula disponíveis após as aulas – avisos diversos • provas são no horário de aula – Software e documentos para download • Dúvidas - Alessandro Garcia, Alexander Lopes: dúvidas das aulas e trabalhos por email • Monitoria: 9º andar do prédio Pe. Leonel Franca – Horário a definir Mar 2009 Alessandro Garcia © LES/PUC-Rio 15 / 18 Critério de aprovação • 2 provas, com consulta – questões teóricas, práticas e/ou relacionadas aos trabalhos – P1: 04/05, quarta, 13:00 – P2: 22/06, quarta, 13:00 • 4 trabalhos, prazos – pág. 6 – T1: exercícios e workshops em sala de aula – T2: 09/05, distribuição: aprox. 28/03 – T3: exercícios e workshops em sala de aula – T4: 27/06, distribuição: aprox. 15/05 • Cálculo da nota final – G1 = ( P1 * 2 + T1 + T2 * 2 ) / 5 – G2 = ( P2 * 2 + T3 + T4 * 2 ) / 5 – GrauFinal = if ( G2 >= 3 ) then ( G1 + G2 ) / 2 else ( G1 + 3 * G2 ) / 4 fi Mar 2009 Alessandro Garcia © LES/PUC-Rio 16 / 18 8 3/2/2016 Trabalhos • O aprendizado também é adquirido e demonstrado através da realização de trabalhos interdependentes • O objetivo dos trabalhos não é escrever algum programa, mas, sim: – desenvolver programas modulares de boa qualidade e que comprovadamente satisfaçam massas de teste previamente estabelecidas – estamos pouco interessados no seu conhecimento sobre particularidades da linguagem de programação: C • Não é objetivo verificar se o aluno conhece todas as sutilezas da linguagem de programação, ou dos algoritmos empregados Alessandro Garcia © LES/PUC-Rio Mar 2009 17 / 18 Trabalhos • Os trabalhos serão feitos em grupos de 2 ou 3 alunos • Serão aceitos somente programas redigidos em C • Os trabalhos serão corrigidos descritos na seção Critérios de Correção de Trabalhos • Os programas devem ser compiláveis utilizando o compilador MS Visual C/C++ 2008 • Façam logo: – tentem instalar o arcabouço – ... para aproveitarem a aula de instalação e uso - arcabouço • Vide outras regras no documento... [1] O Departamento de Informática tem uma licença de uso de software da Microsoft. Veja no LabGrad como conseguir as cópias. Mar 2009 Alessandro Garcia © LES/PUC-Rio 18 / 18 9 3/2/2016 Trabalhos • De maneira geral os trabalhos são bastante trabalhosos – sua realização deve ser iniciada imediatamente ao receber o enunciado – os enunciados deixarão margens para dúvidas • pressuposições e justificativas devem ser feitas nestes casos • Intenção: simular o “mundo real” ao desenvolver programas em empresas – ambigüidades, inconsistências e “incompletudes” são elementos naturais em especificações de requisitos – desenvolvimento incremental • Recompensa: dedicação aos trabalhos se refletirá naturalmente em bom desempenho também nas provas – cuidado! prova detecta elementos “ausentes” do trabalho em grupo Alessandro Garcia © LES/PUC-Rio Mar 2009 19 / 18 Trabalhos • Entrega: os trabalhos devem ser entregues via e-mail. • Vírus: – caso a mensagem contenha vírus, a nota será 0 (zero) – são utilizados diversos controladores de vírus • Atrasos: – será descontado 1 ponto por dia útil de atraso – domingos e feriados não são dias úteis • Critério: – leia com atenção o folheto de critérios de avaliação dos trabalhos em anexo. Mar 2009 Alessandro Garcia © LES/PUC-Rio 20 / 18 10 3/2/2016 Perguntas? Mar 2009 Alessandro Garcia © LES/PUC-Rio 21 / 18 Programação Modular Alessandro Garcia DI/PUC-Rio Março 2016 11