programação orientada a objeto vs baseada em componentes
DESCRIPTION
Slides de EN3617 para introduzir programação para Jogos Digitais em C#TRANSCRIPT
Programação em C# em Unity3DBaseada em COMPONENTES
xOrientada a OBJETOS
EN3617 – Jogos Digitais, aspectos Técnicos e Aplicações
Prof. Mário Minami, 2Q15
OBJETIVOS
• Revisitar Conceitos Básicos de Programação Orientada a Objeto (POO), em Games
• Como usar a Linguagem C# no Motor de Jogos Unity3D
• Apresentar a Programação Baseada em Componentes (PBC) no Unity3D
Breve História do C#
• Bell Labs começou em 1920
• Em 1967 contratou Dennis Ritchie, Físico e Matemático Aplicado de Harvard
• Em 1974, junto com Kernighan, criou a Linguagem C, e com Thompson, o SO Unix
• Em 1983 surgiu o C++ (C com Classes), que mantinha compatibilidade com C
• Em 2001, a Microsoft lançou o C#, combinou C, C++, LISP, Haskell e outras.
Paradigmas do C# (C-sharp)
• Imperativo (operações executadas em ordem)
• Orientado a Objeto: a cada objeto é permitido fazer aquilo que deseja
• Permite gerenciamento de memória pelo programador (por isso é usado em Embedded)
– Por exemplo “recolher o lixo”
Motor de Jogos Unity3D
• Motor de Jogos: SW que fornece funções básicas comuns num videogame 2D ou 3D
• Integra-se com outros SW de edição de imagem e animação como Blender, Maya, 3D Studio Max
• Permite escrever funções em C#, JavaScript e Boo
Breve História do Unity3D
• Início de 90’s o Intel 80486 (proc + coproc Math) “inaugurou” jogos 3D, com polígonos
• Quake 1 (1995) foi o primeiro com realismo 3D• GPUs final de 90’s: 3dfx, nVidia, Maxtrox• Quake 2 (1998), John Carmack: spline, shadows, lighting• Unreal, Half-life, Counter-Strike (1998) – Unreal e Valve
Engines• Século XXI: Popularização das GPU’s e baixo custo das
memórias fez nascer a tendência de produtor “Indie” de games
• UNITY3D: Ambiente “independente” como Game Maker e UDK
Classes em POO e num Game• Classes: combinação de dados e lógica num mesmo arquivo
• Classes são usadas para criar objetos na memória e podem ser duplicados para ter vida própria
• Classes constroem objetos, e peças de dados são parte do objeto, Membros da Classe podem ser parte de dados ou de lógica (métodos ou funções)
• Num Game, com hordas de Zumbis, cada zumbi é instanciado ou duplicado da classe zumbi. Cada zumbi tem valores próprios e individuais, atributo na classe. Cada objeto zumbi duplicado localiza-se e pode ser acertado de forma única, ou instancia.
• Como nas famílias, objetos podem herdar propriedades uns dos outros. Um filho, ou subclasse herda atributos de seu pai, como por exemplo um filho zumbi gostar de cérebros como seu pai. Também pode adicionar novos objetos aos herdados, como tentáculos, que o pai não tinha.
• Objetos conversam por mensagens. Disparos em zumbis podem gerar um evento, “raises” um evento. O impacto de um projétil avisa à classe zumbi o que fazer quando acertada por um projétil. Eventos comandam à classe a agir com este dado, ou o quais funções devem atuar: são as partes lógicas do programa.
Aprendendo a “Copiar e Colar”
“A good artist creates, a great artist steals”
– Copiar ou fazer download do que encontrar, entender o que faz, analisar o código, aprimorar o próprio conhecimento, ajustar às minhas necessidades.
– Cíclico!
– Aprender “truques”: pode-se reescrever do meu jeito
– Encontrar as soluções e ajustá-las ao meu problema, ou elaborá-las de outros pontos próximos.
Comentários
• Linhas 1 e 2, bibliotecas do Unity3D
• Linha 4, nome da Classe
• MonoBehaviour é a Classe Base– filho de Behaviour
• Linhas 6 e 11, comentários
• Linha 7, método Start (), primeiro a ser executado pelo Unity3D
• Linha 12, método Update (), executado a cada ciclo de atualização do sistema
ObjetosUma Classe possui moldes e instruções para construir um novo objeto.
Instancia: Quando construímos um objeto através de moldes e instruções de uma Class. A Classe não é em si mesma uma instanciacriada por ela.
Cada objeto criado deve ser instanciado dos moldes de uma Classe
Exemplo 1: podemos ter uma Classe com instruções para construir um objeto
Outros Exemplos de Objetos• Exemplo 2: Objetos instanciados de moldes
Exemplo 3: Objeto Construído de Classes complexas, por exemplo um SuperVilão, com comportamentos e planos para dominar o mundo
InstanciaçãoPodemos ter múltiplas instancias do Objeto!
POO em Videogames• Classes individuais podem
endereçar diferentes aspectos do Game
• Uma Classe zumbi pode ser instanciada várias vezes para criar uma horda de zumbis errantes
• Uma Classe pode gerenciar como movimentar o seu Jogador com as setas→↓←↑
• Uma outra Classe pode gerenciar o inventário de itens no Game
Interação entre Objetos
• Monstros, balas, câmeras, luzes vieram de Classes das quais eles foram criados
• Cada Objeto no Unity3D deve ser instanciada de uma Classe
• Uma instancia de um Objeto comunica-se com outro Objeto através de mensagens e eventos
Interação entre Objetos 2• Para usar um eletrodoméstico (como uma torradeira) não precisamos
mexer com tudo o que há nele, só no o fabricante deixou disponível, os controles e o local de colocar o pão.
• Em POO, abstração equivale a trabalhar só com o que o programador disponibiliza no Objeto, nunca com os componentes internos.
• Como na torradeira, a caixa protege as peças internas, em POO encapsulagem protegerá a Classe touster, e usamos apenas a interface.
Interação entre Objetos 3• Colocar pão num liquidificador
resulta em pão picado, diferente de pão torrado
Podemos (é recomendável) reutilizar código de programa, para fazer coisas diferentes (mas de mesma natureza), com os mesmos componentes. Esta capacidade de mudar o conteúdo de uma operação é o Polimorfismo.
Herança permite que Classescompartilhem atributos comuns e comportamentos.
Juntar diferentes Classes numa única Classe é o processo de Agregagem (p.ex. O SmartPhone que é muito mais que um telefone móvel)
Programação Baseada em Componentes (PBC)
COMPONENTES – Unidades de produção, aquisição e processos independentes que interagem para o funcionamento do Sistema
Arquitetura Baseada em Componentes (ABC):• Abordagem de Engenharia de Software (ESW) que
foca na decomposição do projeto em ComponentesFuncionais e individuais ou em ComponentesLógicos com interfaces de comunicação bemdefinidas em métodos, eventos e propriedades.
• Maior nível de abstração que OO, e não foca emprotocolos ou estados compartilhados.
Similar ao que ocorre na terceirização na Indústria Automotiva e os Carros Mundiais
Componentes são:• Reutilizáveis. Componentes são usualmente projetados para serem reutilizados
em diferentes cenários e aplicações. Entretanto, alguns componentes podem serprojetados para uma tarefa específica.
• Substituíveis. Componentes podem ser prontamente substituidos por outros componentes similares.
• Sem contexto específico. Componentes são projetados para operar em diferentesambientes e contextos. Informações Epecíficas, como dados de estado, devem serpassados ao componente ao invés de ser incluído ou acessado no componente.
• Extensíveis. Um componente pode ser extendido de um componente existentepara fornecer um novo comportamento.
• Encapsulados. Componentes expõe interfaces as quais permitem que o chamadoruse-as, e não revela detalhes dos processos internos, das variáveis ou estados.
• Independentes. Componentes são projetados para ter dependências mínimas com outros componentes. Assim, componentes podem trabalhar em um ambienteadequado sem afetar os outros componentes.
Exemplos de Componentes e Atributos
• Ridigid Body– Dimensões em 3D– Atraído pela gravidade
• Sphere Collider– Pode ser atingido por um projétil
• Mesh Collider– Pode “fundir” primitivas gráficas
• Audio– Associa som a um pulo, a um disparo de arma laser,
ou a uma morte
Por Exemplo, os Inimigos• Alguns andam ou correm,• Outros só Pulam,• Outros podem voar.• Outros fazem tudo isso!
O Unity3D
• Foi Desenvolvido para trabalhar com Componentes
• É um pouco diferente da arquitetura OO, necessita acostumar-se com a “ideia”
• Para testar o que se faz (“desenvolver” o jogo) é MUITO VERSÁTIL!
Alguns benefícios da PBC
• Implementação mais fácil de novas versões.
• Redução de custo. Principalmente quando há muitos fornecedores
• Facilidade de desenvolvimento. Componentes implementaminterfaces bem conhecidas com definidas functionalidades, permitindo desenvolvimento sem impactar outras partes do sistema.
• Reutilização. O reuso de componentes significa que eles podemservir como difusão de novas aplicações ou sistemas.
• Diminuição da complexidade técnica. Componentes mitigam a complexidade através de palets de componentes e seus serviços. Por examplo ativação de componentes, gerenciamento do tempo de vida, temporização dos métodos, eventos e transações.
Principal mudança para o Desenvolvedor no Unity3D e na PBC
• Abordagem voltada para EVENTOS
• Flexibilidade para modelar Caracteres (jogador, inimigos) através de máquinas de estados
• A transição dos estados dependerá dos eventos selecionados:
– Levou um tiro;
– Pulou;
– Morreu;
– Etc.
Referências• Introdução ao Desenvolvimento de Games, Rabin, S., vol. 2,
Cengage Learning, 2013.
• Learning C# Programming with Unity 3D, Okita, A., CRC Press, 2014.
• Unity: Now You're Thinking With Components, Porter, Oct 2013, in: http://gamedevelopment.tutsplus.com/articles/unity-now-youre-thinking-with-components--gamedev-12492
• Architectural Patterns and Styles, Ch.3, MS DevelopersNetwork, in: https://msdn.microsoft.com/en-us/library/ee658117
• Designing Components versus Objects: A Transformational Approach, Lorenz, D. H. and Vlissides, J., Proc. ICSE, pp 253--262, Toronto, Canada, May 12-19, 2001.