Programação

  • Semana 1 (16 e 18 de março)

  • Semana 2 (23 e 25 de agosto)

    • Quais são os principais elementos de OO?
      • O que é cada um deles?

    • UML (2 vídeos no Coursera)
      • exemplo adicional em sala de aula: leilão via internet
      • exercícios em sala de aula: (1) Cinema (2) Locação de Automóveis

    • Para casa: fazer Semana 2 do Coursera
  • Semana 3 (30 de agosto e 1 de setembro)

    1) Discussão sobre exercícios:

    • Cinema
    • Locação de Automóveis


    2) Discussão Boas Práticas OO


    3) Discussão Depuração vs. Testes


    Para casa: fazer Semana 3 do Coursera


  • Semana da Pátria (5 a 9 de setembro)

    Viva a democracia! Abaixo o autoritarismo!


    • Fazer semana 4 da Parte 1 do Curso no Coursera
    • Trabalhar em grupo no ProjetOO
  • Semana 5 (13 e 15 de setembro)

    • História da OO após Simula
    • Tabela linguagens dinâmicas vs. estáticas
    • Coleções de Objetos
    • Classes abstratas vs. interfaces
    • Linguagens baseadas em protótipos: JavaScript

    • Polimorfismo
    • Exercício UML Polimorfismo

    • Fazer semana 5 da Parte 1 do Curso no Coursera

  • Semana 6 (20 e 22 de setembro)


    • Padrões de Projeto: Estratégia, Adaptador, Singleton
    • Exercício: implementação do Singleton

    • Composite

    • Método Fábrica e Fábrica Abstrata em Ruby

    • Tratamento de Exceções
    • Fluxos de E/S (I/O Streams)

    • Fazer semana 6 da Parte 1 do Curso no Coursera

  • Semana 7 - Convidados internacionais (27 e 29 de setembro)



    • Terminar a última semana da Parte 1 do Coursera

    • 27/9 - Effective Testing with Mauricio Aniche (Delft University of Technology, The Neatherlands) => slides

    • 29/9 - Adaptive-Object Model with Joe Yoder (The Refactory, Inc., USA) => slides
  • Semana 8 (4 e 6 de outubro)

    • 4/outubro:  Engenharia/Arquitetura de Software para Sistemas Inteligentes (convidado: Renato Cordeiro)

    • 6/outubro: 
      • Revisão: padrões Método Fábrica, Fábrica Abstrata e Protótipo
      • Exercício prático
  • Semana do Break do BCC (10 a 15 de outubro)


    • Fazer Semana 1 da Parte 2 do curso no Coursera

    • Trabalhar em grupo no ProjetOO
  • Semana 10 (18 e 20 de outubro)

    18/10:

    • Padrão Command
    • Padrão Memento
    • Padrão Chain of Responsibility


    20/10:

    • Revisão dos padrões Decorator, Fachada e Template Method

    • Padrão Builder
    • Padrão Proxy

  • Semana 11 (25 e 27 de outubro)

    25/10:

    • Revisão Padrão de Projeto State
    • Revisão Padrão Arquitetural MVC

    Seminários: Antes de começar a preparar os slides para apresentação, todos os membros do grupo devem ler o seguinte com bastante atenção: https://www.ime.usp.br/~kon/ResearchStudents/dicasSlides.html

    • Padrão Iterator
    • Padrão Interpreter
    • Padrão Visitor

    Critério de correção da Fase 1 do ProjetOO:

      Uso de bons nomes: 1,0
    Boa arquitetura OO: 1,5
    Qualidade e limpeza do código: 1,5
    Bons testes automatizados: 1,0
    Documentação: 2,0
    Usabilidade: 0,5
    Funcionalidade: 2,5

    27/10:
    • Aula prática no CEC
  • Semana 12 (1 e 3 de novembro)

    1/11:
    • Seminário 2: Resumo de Philosophy of Software Design de John Ousterhout (Ana Yoon, Briza Mel, Jessica Yumi)

    • Discussão sobre implementações do MVC da semana passada

    3/11:
    • Discussão sobre o livro do Ousterhout
    • Engenharia de Software vs. Sistemas de Software vs. Orientação a Objetos

    • Padrão Visitor
  • Semana 13 - Convidados nacionais! (8 e 10 de novembro)



    • 8/11 - Palestra Desenvolvimento de Jogos e OO com Dr. Wilson Mizutani

    • 10/11 - Palestra OO e Arquitetura de Software numa grande empresa pública de TI com Dr. Leonardo Leite
  • Semana 14 (17 de novembro)

    Fazer Semana 2 da Parte 2 do curso no Coursera

    • Seminário 1: Uso de OO em conjunto com Prog. Funcional (Lucas Oshiro, Lucas Nunes, Marco Alves)

    • Seminário 3: Arquitetura Hexagonal (Daniel Silva Lopes , Marcelo, Marília)

    • Seminário 4: Programação Genérica em C++ (Lucas Rosa, Magali Lemes, Pedro Fernandes)
  • Semana 15 (22 e 24 de novembro)

    Fazer Semana 3 da Parte 2 do curso no Coursera

    22/novembro

    • seminário 5: Erosão Arquitetural (Mateus Freire, Lincoln Oliveira, Rodrigo Volpe)
    • seminário 6: Object-Oriented Programming — The Trillion Dollar Disaster (Luca Dillenburg, Gustavo Santos Morais, Matheus Barbosa)
    • seminário 13: Dublês de Teste (Lucas Paiolla, Igor Barberino, Patrick Silva)

    24/novembro:

    • seminário 7: Dependency Injection Management (André Souza, David Tadokoro, Fernando Henrique)

    • Padrão Bridge
    • Princípios SOLID




  • Semana 16 (29 de novembro e 1 de dezembro)

    Fazer Semana 4 da Parte 2 do curso no Coursera

    29/novembro:
    • seminário 9: OO na linguagem Rust (Davi Pereira, Bruno Mazetti, Willian Hiroshi)
    • Núcleo de Empreendedorismo da USP
    • Disciplina de Empreendedorismo Digital

    • Discussão sobre princípios SOLID

    1/dezembro:
    • seminário 11: Design patterns para projetos de machine learning (Vinicius Alves, Suayder, Eduardo Laurentino)
    • seminário 12: Implementação dos Objetos em Python (Arthur Fazio, Naomi Nascimento, Vitor Guidi)
    • seminário 1: Uso de OO com Programação Funcional (Marco Alves e Lucas Nunes)
    • seminário 10: A Plataforma Salesforce: Uma visão arquitetural, recursos programáticos e declarativos (Felipe Jesus)
  • Semana 17

    Fazer 5a e última semana da Parte 2 do Coursera

    • Finalizar, entregar e corrigir exercício dos pares do Arcabouço de Controle de Qualidade

    • Finalizar última fase do ProjetOO
  • Semana 18

    13/12 - Apresentação final do projeto

    Cada grupo deverá apresentar os resultados alcançados pelo seu grupo em 10 minutos, incluindo informações sobre a arquitetura de software, características interessantes de sua implementação, código interessante (opcional) e demonstração do software rodando (pode ser pré-gravado ou screenshots se preferirem).

    A presença neste dia não é obrigatória mas seria interessante que cada grupo tivesse pelo menos 2 representantes para fazer a apresentação.