Introdução à Programação OO Em meu mundo, existem apenas objetos e classes. Interagindo entre si, colaboram e cooperam para atingir objetivos. Bem vindo ao meu mundo. prof. Robinson Vida Noronha 1
Ementa da disciplina IF62C Estratégias Algorítmicas de Resolução de Problemas. Projeto Orientado a Objetos. Conceitos de Padrões de Projeto e Uso de APIs. Ambientes Integrados de Desenvolvimento e de Prototipação. Atividades de laboratório. 2
Objetivos das turmas S13 e S14 Capacitar o aluno a desenvolver e documentar projetos de sistemas Orientados a Objetos. Desenvolver a habilidade de definição de estratégias algorítmicas para obtenção de solução de problemas. Nesse contexto, o aluno deverá ser capaz de projetar Objetos, seus relacionamentos e suas interações. Ser capaz de buscar soluções computacionais a problemas por meio do uso da Orientação a Objetos. Outras habilidades a serem exercitadas pelos alunos são: programação Orientada a Eventos, utilização de componentes, utilização de APIs e desenvolvimento de interfaces de interação com o usuário. Não é objetivo da disciplina e das turmas ser um curso de linguagem de programação. 3
Por que é difícil programar? Programar ainda é uma das mais difíceis tarefas que uma pessoa pode enfrentar. Tornar-se proficiente em programação requer talento, criatividade, inteligencia, lógica, habilidade de contrução e abstração, mesmo quando as melhores ferramentas estão à disposição. 4
Linguagem e Pensamento A linguagem influencia os pensamentos. Qualquer comunidade com interesses em comum irá naturalmente desenvolver um vocabulário especializado para os conceitos que eles discutem. Exemplo: Inuit tem diferentes palavras para descrever a neve: wet, fluffy, heavy, icy, etc... 5
Tipos de Neve... wet, fluffy, heavy, icy, fall, drifty,... 6
Sem generalizar... Teriam, os olhos do Esquimó, alguma habilidade em especial quando comparado aos nossos olhos? Com tempo e treinamento qualquer pessoa pode aprender a diferenciar os diferentes tipos de neve. Como a linguagem que eu conheço (Portugues e um pouco de Inglês) não me força a fazer isso, então, não é natural para mim. 7
Logo... Para aprender a Programar e Projetar Sistemas Orientados a objetos é interessante aprender e dominar ( ao menos ) uma linguagem de programação orientada a objetos. Exemplos de Linguagem de Programação OO: Java, C++, C#, JavaSpript, SmallTalk, Delphi, Python, Objective- C, CLOS, etc... 8
Programação Procedural - FlashBack Centrada de maneira intensa em algoritmos. Tudo ocorre em um método principal. O programa tem apenas um corpo ou célula. ou seja, alguém unicelular. 9
Programação OO Metáfora de sistemas biológicos ou machinelike. Como células, os objetos de um software OO não sabem o que ocorre dentro de outros objetos. Os objetos se comunicam e trabalham juntos para executar diferentes tarefas. Similar ao corpo humano, o coração não sabe o que ocorre no estômago, nem o pâncreas o que ocorre nos bícepes ou glúteos. 10
Metáfora da POO Sistemas Biológico. Diversos órgãos (objetos) que se comunicam e realizam uma ou mais tarefas. Células e objetos seguem instruções programadas. A dinâmica de comportamento de um sistema de software emerge das interações entre muitos objetos. Cada objeto contribui desempenhando um papel ou responsabilidade. 11
Female OO 12
Male OO 13
O que é melhor, isto? Procedural: 14
ou isto? Orientado a Objetos : 15
Origem da OO Inventada em 1960. foi a última solução de uma série de soluções para a software crisis. ideal para o desenvolvimento de sistemas complexos. Software Orientado a Objetos e Sistemas Orientados a Objetos. Linguagens de Programação Puras e Inpuras. 16
Design Concepts Aplicação: um conjunto de objetos interativos. Objeto: uma implementação de um ou mais papéis (ator). Papel: um conjunto de responsabilidades interrelacionadas Colaboração: interação entre objetos ou papéis ou ambos. Contrato: o que define os termos da colaboração. 17
Roles (Papéis) Nenhum objeto existe de maneira isolada. Ele é sempre parte de uma grande máquina. Logo, um objeto tem um propósito específico. Objetos que possuem o mesmo papel podem ser intercambiados. 18
Object Role Stereotypes Propositadamente, utiliza-se oversimplificação ou estereótipos de papéis para ajudar na atividade de focarse nas responsabilidades do objeto. Os estereótipos podem ser úteis para: 19
Object Role Stereotypes Information Holder: conhece e fornece informação. Structurer: mantém relacionamentos entre objetos e informações a respeito desses relacionamentos. Service Provider: executa uma tarefa e, em geral, oferece serviços computacionais. Coordinator: reage a eventos delegando tarefas a outros. Controller: toma decisões e direciona outras ações. Interfacer: transforma informações e solicitações entre as partes 20
Roles, Responsibilities and Collaborations Um software implementa um conjunto de responsabilidades. Responsabilidades estão associadas aos papéis. Um software pode ser considerado bom se ele é estruturado para efetivamente preencher o conjunto de responsabilidades definidas. Projetar Colaborações força-nos considerar objetos como parceiros e não como indivíduos de forma isolada. 21
O que é Design OO? é um processo interativo e incremental de visualizar objetos e suas responsabilidades e definir flexíveis colaborações entre eles. 22
Tipos de Objetos Domain Objects Application-Specific Objects Interfaces 23
Domain Objects Objetos do Domínio ou Domain Objects representam conceitos que são familiares para os usuários e especialistas do domínio de interesse. Por exemplo, em uma aplicação de reserva de passagens aéreas, os Domain Objects poderiam ser: reservas, aviões, assentos, destino, agenda, etc... São os objetos que podem ser discutidos de maneira fácil entre o desenvolvedor do software e o cliente. 24
O que é o Domínio? é o conjunto de informações e serviços que o usuário ou cliente necessita. por exemplo, em um sistema de almoxarifado, teríamos: monitorar o estoque (informação), adicionar ou remover do estoque (serviço), política de manutenção do estoque (informação e serviço) 25
Application-Specific Objects Objetos que traduzem a entrada do usuário (cliques do mouse, movimentos do joystick, por exemplo) para objetos da aplicação em execução. Esses objetos filtram a informação do usuário e então chamam objetos apropriados para a ação. 26
Interfaces Uma interface descreve o vocabulário usado no diálogo entre um objeto e seus clientes. A interface descreve os serviços e explica como solicitá-los. 27
Exemplo de Interface número de dentes, espaçamento, A interface determina se a engrenagem pode ser colocada em uma máquina Um objeto implementa interfaces e afeta outros objetos. 28
Information Hiding Não é problema seu como eu faço o meu serviço, desde que eu o faça de acordo com o que foi combinado. Eu não desejo que outros elementos vendo ou sabendo como eu conduzo o meu negócio. 29
Classes Termo usado na matemática e no dia a dia para descrever um conjunto de coisas similares. Descreve todos os elementos de maneira geral, mas permite que cada instância da classe variar os valores de algumas características. Classes são abstratas e conceituais. Instâncias, por sua vez, são concretas, objetos físicos. 30
Relacionamentos Há apenas dois tipos de relacionamentos entre dois objetos: Composição Herança. 31
Composição é como um casamento entre os objetos. Ele é dinamico e ocorre enquanto os objetos existirem e pode ser modificado. Objetos podem dispensar parceiros e pegar novos parceiros para colaborar com ele. um objeto tem as suas capacidades expandidas por meio dela. 32
Herança é como nascimento em uma família. Uma vez acontecido, é para sempre. Os pais recebem o nome de SuperClass, as classes herdeiras, o nome SubClass. A SubClass assume a todas as responsabilidades definidas na SuperClass e adiciona novas responsabilidades na sua definição. 33
Organização dos Objetos Conforme voce decompõe a sua aplicação em peças lógicas, voce precisa identificar objetos ou papéis e definir classes que implementem papéis específicos. Objetos dinamicamente formam alianças e trabalham juntos em comunidades. Cada objeto em uma comunidade promete preencher ou executar as responsabilidades definidas em seu contrato. 34
Comunidade de Objetos Cada objeto de uma comunidade depende de outro para fornecer respostas confiáveis e previsíveis para as solicitações. A Comunidade é composta por diversos objetos que juntos apresentam um comportamento coletivo complexo. 35
Componentes São elementos que são definidos para serem utilizados em diferentes aplicações. Um componente pode ser atualizado ou trocado sem a necessidade de haver uma nova configuração do ambiente. Um componente bem projetado, independentemente de implementação, pode ser plugado e utilizado em qualquer aplicação orientada a objetos. 36
Padrões Os primeiros desenvolvedores, desenvolveram muitas aplicações de sucesso e estratégias para a solução de problemas. Não seria maravilhoso se esses especialistas pudessem estar ao nosso lado durante a execução de nossos projetos e compartilhar as suas perícias? Sim -> Patterns. 37
Pattern Eles capturam a experiência de especialistas para a solução de problemas recorrentes. Representam essa experiência de uma forma de fácil leitura e de formato de fácil previsão. Padrões incluem descrição de aspectos do problema e de sua solução. 38
Exercício de Encerramento/ 1) Imagine um determinado equipamento ou situação real onde diversos componentes ou elementos interagem de forma a atingir uma meta ou apresentar um comportamento. 2) Como isso poderia ser representado em objetos ou classes? 3) Que tipos de relacionamentos existem entre os elementos que voce identificou? 4) Quais as responsabilidades que voce consegue identificar? 5) É possível identificar algum estereótipo de objeto? Se sim, quais? 39