Ministério da Educação UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Campus Curitiba PLANO DE ENSINO CURSO Engenharia de Computação – Curso 212 MATRIZ 544 / 721 Regido pela Lei nº 9.394, de 20 de dezembro de 1996; pela Resolução CNE/CES n° 11, FUNDAMENTAÇÃO de 11 de março de 2002; e a pela Resolução CONFEA/CREA n° 1010, de 22 de agosto LEGAL de 2005. Aprovado pela Resolução Nº 84/06 COEPP de 17 de novembro de 2006. DISCIPLINA/UNIDADE CURRICULAR Fundamentos de Programação 2 CÓDIGO PERÍODO IF62C 2º CARGA HORÁRIA horas) AT AP APS Total 34 34 4 72 AT: Atividades Teóricas, AP: Atividades Práticas, APS: Atividades Práticas Supervisionadas. PRÉ-REQUISITO EQUIVALÊNCIA IF61C – Fundamentos de Programação 1 OBJETIVOS Dotar o aluno de conhecimentos aprofundados sobre o paradigma de orientação a objetos ressaltando a utilização dos seus mecanismos, programação orientada a eventos, programação concorrente e utilização de componentes e API. Introduzir princípios de projeto de software e posicionar as atividades de projeto e implementação no processo de desenvolvimento de software. Desenvolver o raciocínio de como abordar problemas computacionais usando estes conhecimentos e exercitar a aplicação dos mesmos por meio da utilização de uma linguagem de programação orientada a objetos, de um ambiente integrado de desenvolvimento e de bibliotecas de componentes. EMENTA Estratégias Algorítmicas de Resolução de Problemas. Projeto orientado a objetos. Conceitos de padrões de projeto e uso de API. Ambientes Integrados de Desenvolvimento e de Prototipação. CONTEÚDO PROGRAMÁTICO ITEM EMENTA 1 Projeto orientado a Objetos 2 Estratégias Algorítmicas de Resolução de Problemas 3 Conceitos de padrões de projetos e API 4 Ambientes Integrados de Desenvolvimento e Prototipação CONTEÚDO Revisão de conceitos básicos de orientação a objetos: abstração e encapsulamento, classes, objetos, atributos e métodos. Gestão do ciclo de vida dos objetos: construtores e destrutores, referência a objetos, relacionamentos entre objetos, persistência. Herança e herança múltipla. Propriedades de classes, atributos e métodos: visibilidade e escopo Sobrecarga de métodos e operadores e Polimorfismo Princípio da substituição e vinculação dinâmica. Classes abstratas. Classes aninhadas. Gabaritos (templates). Engenharia de software e suas fases: ênfase nas fases de projeto e implementação. Diagrama de classes em UML. Implementação de métodos e/ou relacionamentos de objetos por meio de componentes, tais como listas, filas e pilhas. Recursividade. Programação orientada a eventos. Conceitos de estados e eventos. Comunicação entre objetos via eventos. Programação concorrente: linhas de Execução (threads). Problemas de concorrência: sincronização de threads, leitura/escrita concorrente em objetos compartilhados, deadlocks, produtor-consumidor. Conceito geral de padrões. Conceito de padrões de projeto. Exemplos de padrões de Projeto (e.g. padrões de Gamma). Aplicações de Padrões de Projeto. Conceito de Application Programming Interface (API) e exemplos, tais como: acesso a recursos e serviços do sistema operacional, construção de interfaces gráficas e comunicação em rede. Configuração do ambiente de desenvolvimento. Programação orientada a objetos gráficos (janelas, botões, etc.) e a eventos. Ambiente de programação “visual” (Wizard & Plug and Play). Integração de ferramentas CASE e ambientes de desenvolvimento. Noções de prototipagem rápida em ambientes de desenvolvimento. Configuração de um ambiente integrado de desenvolvimento. Programação de aplicações em ambiente integrado de desenvolvimento. Uso básico de UML, principalmente, notação de classes e seus relacionamentos, utilizando uma ferramenta case integrável ao ambiente de desenvolvimento. REFERÊNCIAS Referencias Básicas: 1. DEITEL, Harvey M.; DEITEL, Paul J. Java: como programar, 6 ed. São Paulo: Pearson Prentice Hall, 2005. 2. GAMMA, Erich; JOHNSON, Ralph; HELM, Richard; VLISSIDES, John. Padrões de projeto: Soluções reutilizáveis de software orientado a objetos . Porto Alegre: Bookman, 2002. 3. BARNES, David; KÖLLING, Michael. Programação orientada a objetos com Java. São Paulo: Pearson Prentice Hall, 2004. Referências Complementares: 1. SIERRA, Kathy; BATES, Bert. Use a cabeça! Java, 2 ed. Rio de Janeiro: Alta Books, 2007. 2. GOETZ, Brian. Java concurrency in practice. Upper Saddle River: Addison-Wesley, 2006 3. DEITEL, H. M, DEITEL P.J. C++: Como programar, 3 ed. Porto Alegre: Bookman, 2001. 4. LAYNETWORKS. Comparative Study – TCP – UDP. Disponível em http://www.laynetworks.com/Comparative%20analysis_TCP%20Vs%20UDP.htm 5. ORACLE. Lesson: Concurrency (The Java Tutorials > Essential Classes). Disponível em http://docs.oracle.com/javase/tutorial/essential/concurrency/ ORIENTAÇÕES GERAIS Sistema de Avaliação: Conforme previsto no Regulamento da Organização Didático-Pedagógica dos Cursos de Graduação da UTFPR, capítulo VII, artigo 34, parágrafo 4º: “Considerar-se-á aprovado na disciplina, o aluno que tiver frequência igual ou superior a 75% (setenta e cinco por cento) e Nota Final igual ou superior a 6,0 (seis), consideradas todas as avaliações previstas no Plano de Ensino”.