Não há nenhuma turma aberta para este curso
ainda.
Carga Horária: 40 horas
Objetivos:
Apresentar os conceitos de Orientação por Objetos, dando ênfase aos aspectos teóricos e apresentando os conceitos no contexto de uma linguagem de programação.
Formalizar conceitos para posterior prática nos demais cursos da ETEG e no dia-a-dia.
Criar um conhecimento crítico e analítico a respeito dos benefícios, boas práticas e padrões de projetos que de alguma forma estão relacionados ao uso da orientação por objetos.
Diferenciais:
A ementa foi feita por desenvolvedores e cobre os pontos que eles julgam mais importantes ou que já tiveram dificuldade.
Material totalmente em português.
O curso, mesmo utilizando exemplos na linguagem Java, é independente de linguagem de programação. Desta forma, os conceitos são facilmente aplicados à praticamente todas as linguagens OO.
Público-alvo:
Profissionais que desejam aprender e utilizar os conceitos da orientação por objetos.
Profissionais que desenvolvam utilizando linguagens de programação OO como Java, C#, VB.Net, Python, Object Pascal, Groovy, etc.
Profissionais que desejam desempenhar a função de Analista de Sistemas.
Pré-requisitos:
Conhecimento básico de programação em qualquer linguagem.
Profissional Responsável:
Thiago H. de Paula Figueiredo, Bacharel e Mestre em Ciência da Computação pela UFMG; Sun Certified Programmer for the Java 2 Platform 1.4. É autor de vários artigos científicos. Foi Temporary Research Assistant na School of Chemistry da University of Southampton (Reino Unido).
Ementa:
Introdução
Qualidade de Software
Decomposição de Sistemas
Programação Estruturada
Programação Estruturada (cont.)
Programação Orientada por Objetos
Benefícios da OO
Dificuldades da OO
Atividades da Orientação por Objetos
Elementos Fundamentais da OO
Tipos de Dados
Classes
Objetos
Unified Modeling Language
Diagrama de Classes UML
Revisão e Laboratório
Classes e Objetos
Classes (Relembrando)
Perspectivas para Diagramas de Classes
Identificando Classes
Objetos (Relembrando)
Atributos ou Propriedades e Campos
Métodos e Operações
Passagem de Parâmetros
Referências Implícitas
Membros Estáticos (de Classe)
Tempo de Vida de um Objeto
Construtores
Finalizadores
Padrão de Projeto Singleton
Regras de Escopo
Revisão e Laboratório
Herança, Interfaces e Hierarquia de Classes
Herança
Herança (cont.)
Definindo Herança
Entendendo o Uso de Referências
Entendendo o Comportamento da Classe Derivada
Herança Simples e Múltipla
Visões de uma Classe
Classes Abstratas
Definindo Classes Abstratas
Padrão de Projeto Template
Interfaces
Definindo Interfaces
Implementando Interfaces
Herança de Interfaces
Colisão de nomes
Classes Abstratas X Interfaces
Padrão de Projeto Factory Method
Hierarquia de Classes
Identificando Classes e Subclasses
Fechamento de Classes e Membros
Revisão e Laboratório
Polimorfismo
Fundamentos
Fundamentos
Polimorfismo
Tipos de Polimorfismo
Polimorfismo Ad-hoc de Coerção
Polimorfismo Ad-hoc de Sobrecarga
Polimorfismo Universal Paramétrico
Polimorfismo Universal de Inclusão
Método Virtual
O Problema da Classe Base Frágil Revisto
Polimorfismo Universal de Inclusão
Polimorfismo Universal de Inclusão
Revisão e Laboratório
Associações
Associação
Direção e Multiplicidade de Associações
Identificando Associações
Associações na Implementação
Agregação e Composição
Identificando Agregações e Composições
Classes Internas e Aninhadas
Composição X Generalização
Padrão de Projeto Composite
Padrão de Projeto Strategy
Realização
Dependência
Associações Reflexivas
Revisão e Laboratório
Abstração, Modularidade, Encapsulamento e Ocultamento de Informação
Abstração
Modularidade
Acoplamento
Coesão
Organização em Pacotes
Organização em Camadas (Layers)
O Modelo de 4 Camadas
Dependência de Pacotes
Encapsulamento
Ocultamento de Informação
Encapsulamento e Ocultamento de Informação
Classes da Análise
Classes de Desenho
Revisão e Laboratório
Tipagem, Exceções e Persistência
Tipos Revistos
A Escolha de Tipos
Exceções
Tratamento de Exceções
Persistência
Características da Persistência
Persistência em Arquivos
Persistência em Banco de Dados
Mapeando um Modelo de Domínio para um Banco Relacional