introdu o programa o oo - professorvida.com.br · eventos, utilização de componentes,...

39
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 Monday, April 20, 15

Upload: lamdien

Post on 21-Nov-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

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 Noronha1Monday, April 20, 15

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.

2Monday, April 20, 15

Objetivos das turmas S13 e S14Capacitar 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.

3Monday, April 20, 15

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.

4Monday, April 20, 15

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...

5Monday, April 20, 15

Tipos de Neve...wet,

fluffy,

heavy,

icy,

fall,

drifty,

...

6Monday, April 20, 15

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.

7Monday, April 20, 15

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...

8Monday, April 20, 15

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.

9Monday, April 20, 15

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.

10Monday, April 20, 15

Metáfora da POOSistemas 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.

11Monday, April 20, 15

Female OO

12Monday, April 20, 15

Male OO

13Monday, April 20, 15

O que é melhor, isto ?Procedural:

14Monday, April 20, 15

ou isto ?Orientado a Objetos :

15Monday, April 20, 15

Origem da OOInventada 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.

16Monday, April 20, 15

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.

17Monday, April 20, 15

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.

18Monday, April 20, 15

Object Role Stereotypes

Propositadamente, utiliza-se oversimplificação ou estereótipos de papéis para ajudar na atividade de focar-se nas responsabilidades do objeto.

Os estereótipos podem ser úteis para:

19Monday, April 20, 15

Object Role StereotypesInformation 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 20Monday, April 20, 15

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.

21Monday, April 20, 15

O que é Design OO ?

é um processo interativo e incremental de visualizar objetos e suas responsabilidades e definir flexíveis colaborações entre eles.

22Monday, April 20, 15

Tipos de Objetos

Domain Objects

Application-Specific Objects

Interfaces

23Monday, April 20, 15

Domain ObjectsObjetos 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.

24Monday, April 20, 15

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)

25Monday, April 20, 15

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”.

26Monday, April 20, 15

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.

27Monday, April 20, 15

Exemplo de Interfacenú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.

28Monday, April 20, 15

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.”

29Monday, April 20, 15

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.

30Monday, April 20, 15

Relacionamentos

Há apenas dois tipos de relacionamentos entre dois objetos:

Composição

Herança.

31Monday, April 20, 15

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.

32Monday, April 20, 15

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.

33Monday, April 20, 15

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.

34Monday, April 20, 15

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.

35Monday, April 20, 15

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.

36Monday, April 20, 15

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.

37Monday, April 20, 15

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.

38Monday, April 20, 15

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 ?

39Monday, April 20, 15