Programação Modular
Alessandro Garcia
DI/PUC-Rio Março 2019
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...
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
Áreas de Atuação e Projetos Desenvolvidos
• Áreas de pesquisa
– Manutenção de software, ex.: medição de software e detecção automática de anomalias de modularidade
– Apoio automatizado para escrita de código robusto e seguro
• 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)
– . . .
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
– modelos, teste, documentação, assertivas, tratamento de exceções – inspeção, estratégias de cobertura de teste, instrumentação, etc...
Professores envolvidos…
• Prof. Alessandro Garcia responsável desta turma ([email protected])
• Prof. Luiz Carvalho
([email protected])
• Monitoria:
Luiz Carvalho ([email protected] )
• Dúvidas de aulas e trabalhos: por email
• Outra turma: Flavio Bevilacqua
Quem são vocês?
• Nome?
• Período?
• Curso?
• Envolvimento prévio com projetos de software?
– Trabalha? Estagiário? Iniciação Científica?
– Experiência com Programação OO (Java, C#, etc...)?
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
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
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
• disciplina: 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
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
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
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”
Convivência
• Pontualidade
– começamos 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
Organização
• 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
• Seqüência das aulas: página 7
Documento: apresentação da disciplina
Organização
• 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
• Seqüência das aulas: página 7
• Toda a comunicação deverá ser feita eletronicamente
– e-mail: [email protected]
• Dúvidas - dúvidas das aulas e trabalhos por email
• Monitoria: 9º andar do prédio Pe. Leonel Franca
– Horário a definir
Critério de aprovação
• 2 provas, com consulta – questões teóricas, práticas e/ou relacionadas aos trabalhos
– P1: 15/05 – P2: 03/07
• 4 trabalhos, prazos – pág. 6
– T1: exercícios e workshops em sala de aula – T2: 13/05, distribuição: aprox. 05/04
– T3: exercícios e workshops em sala de aula – T4: 01/07, distribuição: aprox. 19/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
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
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
• Façam logo:
– tentem instalar o arcabouço
– ... para aproveitarem a aula de instalação e uso - arcabouço
• Vide outras regras no documento...
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
Trabalhos
• Critério:
– leia com atenção o folheto de critérios de avaliação dos trabalhos em anexo
• Entrega: os trabalhos devem ser entregues via e-mail
• Atrasos:
– será descontado 1 ponto por dia útil de atraso – domingos e feriados não são dias úteis
• Vírus:
– caso a mensagem contenha vírus, a nota será 0 (zero) – são utilizados diversos controladores de vírus
Perguntas?
Programação Modular
Alessandro Garcia
DI/PUC-Rio Março 2019