TREINAMENTO ORIENTAÇÃO A OBJETOS

Tamanho: px
Começar a partir da página:

Download "TREINAMENTO ORIENTAÇÃO A OBJETOS"

Transcrição

1 TREINAMENTO ORIENTAÇÃO A OBJETOS SOFTMAP Tecnologia e Inovação Copyright 2016 Softmap Treinamentos e Serviços EIRELI ME. Todos os direitos reservados. Nenhuma parte deste documento pode ser copiada, reproduzida, traduzida ou transmitida por qualquer meio eletrônico ou mecânico, na sua totalidade ou em parte, sem a prévia autorização escrita da SOFTMAP, que se reserva o direito de efetuar alterações sem aviso prévio.

2 SUMÁRIO Introdução... 3 Linguagens de Programação... 3 Conceitos... 4 Encapsulamento... 6 Herança... 7 Relacionamento entre objetos... 8 UML (Unified Modeling Language)... 9 Diagrama de Classes Diagramas de Interação Padrões de Projeto Princípios SOLID (S) Single Responsability Principle - Princípio da Responsabilidade Única (O) Open / Closed Principle - Princípio Aberto / Fechado (L) Liskov Substituiton Principle - Princípio Substituição de Liskov (I) Interface Segregation Principle (D) Dependency Inversion Principle Princípio da Inversão de dependência Padrões de Projeto GOF Padrões de Criação Padrões Estruturias Padrões comportamentais

3 Orientação a Objetos (OOP) Introdução A proposta deste material é apresentar Orientação a Objetos de uma forma prática, ainda que o assunto seja essencialmente de conteúdo conceitual. Para complementação dos conceitos serão usados exemplos em algumas linguagens de programação, sem aprofundamento na linguagem, para oferecer uma ideia básica de como os conceitos são expressos por essas linguagens. Inclui-se ainda, uma pequena introdução a UML e padrões de projeto. UML é um padrão amplamente utilizado para representar, através de vários tipos de diagramas, modelos orientados a objetos, sem se prender aos detalhes de uma implementação de linguagem. Padrões de projeto oferecem a possibilidade de construir bons projetos e melhor aproveitar os recursos oferecidos pela Orientação a Objetos. Os padrões de projeto são um apanhado de soluções comuns a vários tipos de problemas. É resultado do aprendizado prático compartilhado para que novos projetos evitem repetir antigos erros. Linguagens de Programação Nem todas as linguagens são orientadas a objetos e nem todas as linguagens tem todos os conceitos de OO. E são poucas aquelas que podem ser consideradas puras, isto é, tudo é considerado um objeto. Além do mais, ainda que um programador da atualidade use na maior parte do tempo uma linguagem orientada a objetos, dificilmente ele estará limitado a tais linguagens. SQL e JavaScript são apenas alguns exemplos de linguagens não OO. E mesmo nesses casos, são encontradas interações, como é o caso da persistência de objetos em banco de dados relacionais através do uso de ORM. A Orientação a Objetos não é algo que surgiu recentemente. Ganhou força através da linguagem C++ e com Java se tornou realmente popular. A importância de OO é tão grande que muitas linguagens que originalmente não ofereciam suporte a objetos, passaram a adotar tais conceitos. Muito antes das linguagens orientadas a objeto, a programação utilizava a linguagem de máquina (assembly). Apesar de eficiente e ainda usada em alguns casos, não é produtiva. Surgiram então linguagens que permitiram um melhor entendimento do que se pretendia com código escrito, mas a medida que aumentavam os programas e a complexidade deles, novos desafios surgiam. A linguagem C é a linguagem que C++ usou para se basear. Assim como outras linguagens procedurais, ela buscou organizar o código nas chamadas funções e permitir a criação de estrutura de dados. As funções permitem a reutilização de um determinado código, sem duplicação desse código. E as estrutura de dados possibilita o agrupamento de dados relacionados, não se limitando aos tipos primitivos (numéricos e caracteres). E novamente surgiram situações que esse modelo tinha dificuldades em resolver. Por exemplo, uma estrutura de dados tem todos seus dados acessíveis a qualquer parte de um programa, não havendo nada que impeça seu uso indevido ou uma alteração de um dado que deveria provocar a execução de outros códigos. 3

4 Foi em busca de melhorar esse vínculo de estrutura de dados e código e sua reutilização que começa a surgir a Orientação a Objetos, que traz o conceito de classes, uma estrutura de dados onde apenas um conjunto limitado de funções, os métodos, tem acesso a detalhes. Ainda que se diga que é possível realizar uma programação orientada a objetos em C, isso exige muita disciplina e é sujeito a erros, pois a linguagem não oferece o suporte natural. Mas o suporte a orientação a objetos em uma linguagem não é suficiente para se desenvolver corretamente um bom programa. É necessário conhecer bem os conceitos de OO e as boas práticas. Do contrário, facilmente um código pode se tornar um programa procedural usando uma linguagem OO ou certas práticas válidas em um programa procedural criar vícios que prejudiquem o projeto. Conceitos O mundo real é rodeado de objetos. Lidamos com cadeiras, computadores, comida, carros e um infinito conjunto de exemplos de objetos da vida real. Esses objetos possuem características e podem executar coisas ou reagir a certas condições. Inspirado nisso, a programação orientada a objetos tenta trazer algo natural ao ser humano ao contexto do desenvolvimento de sistemas. Na orientação a objetos, a estrutura fundamental está nas classes, sendo que um objeto é criado a partir de uma classe. Uma classe é formada por atributos e métodos. Os atributos são dados e métodos o código que utiliza tais dados. Podemos dizer que uma cadeira representa uma classe e cada cadeira fabricada é um objeto. Uma cadeira tem como características gerais uma quantidade de pernas, existência de encosto ou braços, se permite reclinar, pode ser movimentada. Essas características são os atributos da classe. Uma cadeira ajustável altera altura ou inclinação, dentro de um limite físico permitido. Esse ajuste é feito, em termos de orientação a objetos, em um método, que executa a ação e verifica se os valores de altura ou inclinação estão sendo respeitados. Outro exemplo da vida real menos concreto são as formas geométricas. Quadrados, triângulos, círculos, retângulos e polígonos são exemplos de formas geométricas, cada qual com características próprias, mas que compartilham entre si características comuns. Se fossemos desenvolver uma aplicação de desenho, essas formas ocuparão uma área da tela, poderão ter cores para pintura da borda e do interior, os atributos das classes. Tais objetos poderão ser redimensionados, movimentados, ações que serão expressas em métodos dessas classes. As linguagens usam sintaxes diferentes para definir uma classe. Por exemplo, em C++ temos class Shape { private: int topleft; int topright; int bottomleft; int bottomright; public: Shape(int topleft, int topright, int bottomleft, int bottomright); void settopleft(int topleft); int gettopleft(void);... 4

5 } int getbottomrigth(); void draw(void); Shape::Shape(int topleft, int topright, int bottomleft, int bottomright) {... } A mesma classe em Java: public class Shape { private int topleft; private int topright; private int bottomleft; private int bottomright; public Shape(int topleft, int topright, int bottomleft, int bottomright) {... } public void settopleft(int topleft) { this.topleft = topleft; } public int gettopleft() { return topleft; }... public void setbottomleft(int bottomleft) { this. bottomleft = bottomleft; } } public void draw() { } A mesma classe em C# class Shape { private int _topleft; private int _topright; private int _bottomleft; private int _bottomright; public int topleft { get { return _topleft; } set { _topleft = value; } }... 5

6 public Shape() { } } public void draw() { } Ainda que existam diferenças de sintaxe, todas seguem os mesmos conceitos. A classe de nome Shape tem a definição dos atributos topleft, topright, bottomright e bottomleft e de um método chamado draw. Em UML, a representação da classe é feita através de um diagrama de classes: topleft : int topright : int bottomleft : int bottomright : int draw() Shape Aqui é feita apenas a representação de uma única classe. Mais adiante é falado um pouco mais sobre diagrama de classes. Encapsulamento A junção de atributos e métodos relacionados em uma classe é denominada de encapsulamento. Para que ela cumpra seu papel, atributos e métodos precisam ser conceitualmente relacionados. Nossa classe Shape tem atributos que representam a localização espacial da forma geométrica. Incluir um atributo que não tenha relação com conceitos geométricos é um erro de projeto e pode se tornar um problema. Por outro lado, somente os métodos dessa classe devem ter acesso e poder alterar os valores dos atributos. Por exemplo, um quadrado deve ter garantia de que as medidas dos quatro lados são iguais, e isso é responsabilidade dos métodos desta classe. Essa característica de limitar o acesso dos atributos a apenas os métodos da classe é uma parte do encapsulamento conhecida como ocultação de dados ou visibilidade, onde ficam estabelecidos níveis de acesso aos atributos e até mesmo aos métodos. A visibilidade pode ser pública ou privada. No caso dos atributos, a prática é mantê-los com acesso privado aos métodos da classe. Já os métodos devem oferecer uma visibilidade pública para serem úteis a outras classes / objetos. O comportamento do objeto é então definido pelos seus métodos que são os únicos que manipulam os atributos. A possibilidade de um objeto manter dados através de seus atributos confere a ele a característica de retenção de estado. Um estado é o conjunto de valores mantidos pelos atributos em um dado momento. Com a alteração de um valor de um atributo, o estado do objeto é alterado resultando em um evento. Um evento pode ser usado para notificar a outros objetos a ocorrência dessa mudança. 6

7 Os atributos de uma classe podem também definir a identidade de um objeto, dando uma unicidade, isto é, nenhum outro objeto será igual. Os atributos podem ainda ter características que determinam se poderão ser alteradas. Um atributo é considerado imutável se seu valor não é alterado após definido, o que normalmente ocorre na criação do objeto. Um atributo mutável não tem restrições de alteração. Herança Seguindo com o exemplo da classe Shape, observa-se que ela define 2 pares de coordenadas x / y, mas insuficientes para tratar uma diversidade de formas como Quadrado, Retângulo, Círculo e Polígonos. No entanto são valores que servem a todas essas formas, pois determinam a área em que se pretende desenhar a forma específica. Esta classe apresenta uma característica chamada de abstração. Ela define características comuns de um conceito, mas insuficientes para atender a todos cenários. E o motivo de não termos em uma só classe a possibilidade de desenhar todas as formas é porque isso traria grande complexidade ao código e teríamos atributos que não são usados em todos os casos, como um atributo raio para um círculo. Portanto a orientação a objetos traz o benefício de diminuição de complexidade e por consequência melhor manutenção. Quando, em uma determinada classe, um método que é considerado abstrato, isto é, não possui uma implementação definida, esta classe não está completa e não pode gerar objetos a partir dela. Isso nos obriga criar uma nova classe que estende e implemente de forma mais adequada. Essa nova classe mantém as características da classe estendida através de um conceito conhecido como herança. O diagrama de classes a seguir mostra como a herança entre classes é representado em UML. É através da herança é que será possível desenhar formas como quadrado, círculo ou retângulo. É muitas vezes chamada como relação é um, pois um quadrado é uma forma geométrica. Uma classe Square e Circle é considerada uma especialização da classe Shape e esta uma generalização de Square e Circle. Aqui é preciso observar que mesmo que Square e Circle também sejam tipos mais especializados de Shape, esta será a única semelhança entre 7

8 Square e Circle. Isto é, um objeto de Square não será totalmente compatível com um objeto Circle, não havendo conversão de um para outro. A classe Shape pode ser chamada de classe pai ou superclasse ou classe base. As classes herdadas são denominadas subclasses, classes derivadas ou classes filhas. Todos os atributos definidos em Shape são herdados pelas classes Circle e Rectangle. Circle adiciona o atributo radius, específico ao contexto de desenho de círculos. Da mesma forma Rectangle possui um novo atributo chamado width, que determina a medida dos lados. Observa-se no diagrama que tanto Circle quanto Rectangle tem o método draw. Isso ocorre porque estas classes terão uma implementação especializada da operação de desenhar a forma geométrica. Essa possibilidade de sobrescrever um método definido na classe pai é chamada de polimorfismo. O polimorfismo é o que permite que o método draw em Circle faça o desenho de um círculo e draw em Rectangle desenhe um quadrado, sem que Shape precise ser alterado. Dependendo do número de classes que são estendidas por uma nova classe, a herança pode ser denominada simples ou múltipla. Uma herança pode ainda ser classificada em herança de implementação e de interface ou tipo. A herança de interface ocorre quando uma classe estende uma ou várias interfaces. Uma interface, diferente de uma classe, define apenas métodos, sem implementação nenhuma. Não podem ser criados objetos. Nem todas as linguagens permitem a herança múltipla, como é o caso de Java. No entanto Java possui um tipo de herança múltipla de interfaces. Relacionamento entre objetos Um programa orientado a objetos dificilmente terá apenas objetos de uma única classe. Muito pelo contrário, várias classes diferentes são criadas para representar conceitos distintos. E os objetos dessas classes relacionam-se entre si, de forma a colaborarem entre si, cada um com seu comportamento e responsabilidade individual, mas complementares no conjunto. São três os tipos de relacionamentos. O mais comum é denominado associação. Há ainda a agregação e a composição, que são relacionamentos onde há uma maior dependência entre os objetos. O grau de dependência que um objeto tem em relação a outro objeto define o acoplamento entre estes objetos. Por princípio deve-se buscar manter um baixo acoplamento. É uma característica que determina o quanto um objeto ou classe consegue realizar suas operações sem depender de outros objetos. Outro conceito relacionado à dependência é a coesão. É resultado do encapsulamento e implica em operações conceitualmente relacionadas. Por princípio espera-se uma coesão forte, isto é, o objeto é especializado em um determinado conceito e não é preciso um segundo objeto auxiliar. Por outro lado, esse objeto limitará a operações associadas ao conceito. Por exemplo, para manter uma coesão alta em classes de desenho de forma geométrica, elas devem permitir o maior número de operações como rotação, deslocamento ou redimensionamento. Se forem incluídas operações envolvendo a persistência, como salvar em um arquivo no disco rígido, a coesão é prejudicada. O reaproveitamento dos objetos depende das características da coesão e do acoplamento. O relacionamento entre objetos tem ainda outras características. Quando objetos chamam métodos uns dos outros, diz-se que há uma comunicação por troca de mensagens. Quando dois objetos se reconhecem entre si, podendo os dois se comunicar, há uma associação 8

9 bidirecional. Quando o objeto que recebe a mensagem, isto é, cujo método é executado, não sabe quem envia a mensagem há uma associação unidirecional. O número de objetos de uma classe que outro objeto pode interagir determina a cardinalidade ou multiplicidade de um relacionamento. A agregação é um tipo de associação onde vários objetos de classes normalmente distintas são unidos em um objeto principal. De forma similar exista a composição, em que há um objeto que contém outros. A diferença está no tempo de vida dos objetos que formam uma composição ou agregação. Na agregação um objeto em particular pode continuar existindo mesmo depois que o objeto principal deixa de existir. Já na composição quando o objeto principal deixa de existir, todos os demais objetos também. Um casal pode ser considerado uma composição, pois deixa de existir se uma das partes morrer. Já uma família é um tipo de agregação. Se um dos indivíduos morre, a família não necessariamente deixa de existir. UML (Unified Modeling Language) Até pouco tempo antes da criação da UML, a literatura existente utilizava várias formas de representação de classes e objetos em diagramas. Dependendo do autor, havia uma forte influência dos diagramas ER (entidade-relacionamento), usados para modelagem dos relacionamentos entre tabelas em um banco de dados. UML surgiu quando três das principais personalidades na área de orientação de objetos se uniram em busca de uma padronização na modelagem OO. Cada um deles havia desenvolvido uma metodologia para análise e projeto de sistemas orientados a objeto e havia muitas similaridades entre elas. A grande vantagem do uso de UML é auxiliar na visualização e tomada das decisões de projeto, além de documentar o sistema. Seu uso não exige obriga adotar uma determinada linguagem e permite a liberdade no nível de detalhes expressos nos diagramas, que pode ser simples diagramas conceituais ou até mesmo diagramas que servem de base para geração de código. Os diagramas se dividem em dois grandes grupos: estruturais; o Diagrama de classes; o Diagrama de objetos; o Diagrama de componentes; o Diagrama de instalação; o Diagrama de pacotes; o Diagrama de estrutura compostas; o Diagrama de perfil. comportamentais. o Diagrama de caso de uso; o Diagrama de sequencia; o Diagrama de colaboração; o Diagrama de estados; o Diagrama de atividade; o Diagrama de tempo; 9

10 o Diagrama de interação. Esse material introduz os diagramas de classes e diagramas de sequencia e de colaboração, mais comuns e muito usados na literatura. O diagrama de classes integra os diagramas estruturais. Nele são representadas as classes, seus métodos e atributos, herança e associações. Os diagramas de sequencia e de colaboração são diagramas comportamentais, isto é, permitem modelar o sistema em aspectos dinâmicos. Esses dois diagramas são intercambiáveis, e oferecem o mesmo tipo de informação, sendo complementares. Diagrama de Classes Em um diagrama de classes, usa-se retângulo para representar classes. Na sua forma mais simples ele contém apenas o seu nome, como no caso das classes Curso e Estudante. Para apresentar os atributos e métodos, divide-se o retângulo em até 3 partes. Os atributos são exibidos na segunda parte e métodos na terceira. A classe Pessoa mostra os atributos nome e nascimento. Na classe disciplina é possível ver um método. A sintaxe usada para atributos é: [ + # - ] nome [ [ dimensão ] ] [ : tipo] [ = valor_inicial] Os caracteres +, # e - indicam a visibilidade do atributo e seu uso é opcional e o significado é, respectivamente, público, protegido e privado. Quando nada é indicado, o padrão é público. Após o nome pode ser incluído, entre colchetes, a multiplicidade, isto é, o número de valores que o atributo pode conter (array / matriz). 10

11 Quando é indicado o tipo do atributo, ele é indicado logo após o nome seguido do símbolo : (dois pontos). Um atributo pode ainda conter um valor inicial, indicado pelo símbolo = (igual) seguido pelo valor. A sintaxe para métodos é: [ + # - ] nome ( argumentos ) [ : tipo] Assim como para atributos, pode ser indicada a visibilidade antes do nome. Após o nome, entre parênteses, são listados os argumentos, separados por vírgula. Quando o método fornece retorno de valor, ele pode ser indicado ao final pelo símbolo : (dois pontos) seguido pelo tipo. O relacionamento entre classes é feito por linhas, cujo significado depende do símbolo usado na extremidade. Associação Bidirecional Associação Unilateral Composição Agregação Herança Nas extremidades das linhas de associação, pode-se indicar a multiplicidade ou cardinalidade. Por padrão, quando nada é incluído, assume-se que não há restrição no número de associações. No diagrama, o relacionamento entre as classes Professor e Disciplina faz uso da multiplicidade com o significado de que uma disciplina poderá ter apenas um professor, mas um professor pode dar aulas em mais que uma disciplina. Diagramas de Interação Diagramas de sequencia ou de colaboração são dois tipos de diagramas em que é possível expressar a troca de mensagens entre objetos em uma determinada sequencia, oferecendo uma visão dinâmica do sistema. Um diagrama de classes mostra os métodos de cada classe, mas não permite enxergar como cada objeto interage entre si e a ordem de execução dos métodos. Apesar de esses dois diagramas terem esse objetivo comum, eles se diferenciam na forma do desenho. O diagrama de sequencia é mais voltado ao aspecto da troca de mensagens enquanto que o de colaboração permite visualizar o relacionamento entre os objetos. O diagrama de sequencia distribui os objetos em colunas. A chamada dos métodos é representada através de uma flecha entre dois objetos, com o nome do método sobre ela. A ordem de execução dos métodos se dá pela ordem em que são apresentadas as chamadas no eixo vertical. Esse tipo de diagrama ocupa mais espaço, mas tem maior facilidade em se visualizar a ordem de execução. 11

12 O diagrama de colaboração se parece em parte com um diagrama de classes, pois as classes se distribuem de uma forma livre, não em colunas e as linhas de relacionamentos estão presentes. É sobre as essas linhas que são indicadas as chamadas aos métodos de cada classe. A ordem de execução desses métodos é feita usando uma numeração. 12

13 Padrões de Projeto Conhecer os conceitos que envolvem o desenvolvimento orientado a objetos é apenas uma parte do que se precisa para construir bons aplicativos. À medida que se adquire prática e nos deparamos com problemas, descobre-se melhores formas para a definição de classes. Mas essa prática leva tempo e muitas vezes os problemas enfrentados são os mesmos que outros programadores em algum momento também tiveram. Para isso é importante conhecer alguns princípios e padrões de projeto que são a contribuição de tais programadores. Princípios SOLID (S) Single Responsability Principle - Princípio da Responsabilidade Única Uma responsabilidade é definida como sendo as obrigações que uma classe tem em termos de comportamento. Uma responsabilidade pode ser algo que uma classe faz, como execução de cálculos, criação de novos objetos, se comunicar com outros objetos ou coordenar outros objetos. Uma responsabilidade pode ser também ter conhecimento dos dados encapsulados, de objetos relacionados ou de dados derivados. Este princípio orienta que uma classe deve sempre buscar manter uma única responsabilidade alcançando uma coesão alta. A consequência prática é que classes tendem a sofrer poucas alterações. Considerando o exemplo das classes de forma geométrica. Um aplicativo de diagramação o usuário terá uma tela em que são exibidas as formas em sua representação gráfica, onde elas poderão ser redimensionadas, movimentadas dentro do espaço e com certeza espera-se que possa ser salvo em um arquivo. Essas são as responsabilidades de nosso sistema. Se tivermos apenas uma única classe para atender a todas essas funcionalidades, qualquer alteração que ocorra afetará sempre a mesma classe, além de produzirmos um código complexo. O melhor é separar em três classes distintas, Rectangle representando um quadrado e realize cálculos, RectangleView para exibir em tela um quadrado a partir de Rectangle e por fim RectangeFile que é capaz de criar um arquivo com os dados de Rectangle e posteriormente recriá-lo a partir do arquivo. A partir dessa separação, se uma alteração envolvesse a forma de como o quadrado é desenhado, apenas RectangleView sofreria a alteração. (O) Open / Closed Principle - Princípio Aberto / Fechado A definição diz que uma classe precisa permitir estender, mas não deve permitir modificações. É uma diretriz para o uso de abstração e polimorfismo. Permitir estender é oferecer a possibilidade de incluir novas funcionalidades. A extensão é obtida através do uso de herança, mais especificamente abstração. A classe precisa estar preparada de forma que uma extensão não obrigue a modificação de um código existente. A classe Shape apresentada anteriormente possui um método draw. Se precisarmos alterar esse método para suportar uma nova forma geométrica, então o princípio não está sendo atendido. 13

14 A consequência prática é que uma vez definida uma classe, ela não é afetada pelas classes que a estendem. (L) Liskov Substituiton Principle - Princípio Substituição de Liskov Esse princípio orienta o uso de herança entre classes. De acordo com esse princípio, toda classe derivada pode ser substituída pela classe pai. Em outras palavras, se um código reconhece a classe Shape, esse mesmo código poderá interagir com qualquer objeto herdando Shape, como Rectangle ou Circle, sem a necessidade de modificações. Outro efeito desse princípio é que a classe Shape não é modifica se uma nova classe herdar dela. (I) Interface Segregation Principle Este princípio trata dos casos em que não é possível manter alta coesão em uma classe. Nesses casos facilmente encontra-se um acoplamento alto entre esta classe e seus clientes. O objetivo deste princípio é quebrar a classe em interfaces para cada tipo de cliente, diminuindo o acoplamento. Para isso utiliza-se a herança de múltiplas interfaces. (D) Dependency Inversion Principle Princípio da Inversão de dependência Muitas vezes um objeto depende de outros objetos que fornecem serviços que auxiliam nas tarefas. Esse tipo de dependência pode causar um acoplamento alto, normalmente obrigando a esse objeto criar os objetos auxiliares. De acordo com esse princípio, o objeto não deve conhecer a classe concreta dos objetos de serviço, apenas a interface de interesse. A criação desses objetos de serviço também não é de responsabilidade do objeto principal, que apenas recebe os objetos de serviço. Como resultado, reduz-se o acoplamento. Esse princípio está amplamente presente nos principais frameworks do mercado, como por exemplo spring-framework para java. Padrões de Projeto GOF Existe na literatura técnica um grande conjunto de padrões de projeto documentados, muito deles específicos a determinados contextos, como integração de sistemas, desenvolvimento de sistemas corporativos, desenvolvimento WEB, etc. Porém até mesmo esses padrões se utilizam dos padrões GOF. Trata-se de uma coleção de 23 padrões documentados por Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, conhecidos como a gangue dos quatro (GOF). Esse material apenas irá relacionar de forma resumida os padrões, retirados do livro Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos, visto que eles publicaram em detalhes esses padrões e muitos artigos estão disponíveis com exemplos práticos em várias linguagens de programação. Os padrões se relacionam entre si como pode ser visto no diagrama seguinte. 14

15 Os pradrões se dividem em 3 grupos, listados a seguir. Padrões de Criação Abstract Factory Fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas. 15

16 Builder Separa a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa criar diferentes representações. Factory Method Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual a classe a ser instanciada. O factory method permite a uma classe postergar / atrasar a instanciação às suas subclasses. 16

17 Prototype Especifica os tipos de objetos a serem criados usando uma instância de protótipo e cria novos objetos copiando esse protótipo. Singleton Garante que uma classe tenha somente uma instância e fornecer um ponto global de acesso a ela. 17

18 Padrões Estruturias Adapter Converte a interface de uma classe em outra interface esperada pelos clientes. O adapter permite que certas classes trabalhem em conjunto, pois de outra forma seria impossível por causa de suas interfaces incompatíveis. Bridge Separa uma abstração de sua implementação, de modo que as duas possam variar independentemente. 18

19 Composite Compõe objetos em estruturas de árvore para representar hierarquias do tipo partes-todo. O composite permite que clientes tratem objetos individuais e composições de objetos de forma uniforme. Decorator Atribui responsabilidades adicionais a um objeto dinamicamente. Os decorators fornecem uma alternativa flexível a subclasses para extensão da funcionalidade. 19

20 Façade Fornece uma interface unificada para um conjunto de interfaces em um subsistema. O façade define uma interface de nível mais alto que torna o subsistema mais fácil de usar. 20

21 Flyweight Usa compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente. Proxy Fornece um objeto representante (surrogate), ou marcado de outro objeto, para controlar o acesso ao mesmo. Padrões comportamentais Chain of responsability Evita o acoplamento do remetente de uma solicitação ao seu destinatário, dando a mais de um objeto a oportunidade de tratar a solicitação. Encadeia os objetos receptores e passa a solicitação ao longo da cadeia até que um objeto a trate. 21

22 Command Encapsula uma solicitação como um objeto, desta forma permitindo que você parametrize clientes com diferentes solicitações, enfileire ou registre (log) solicitações e suporte operações que podem ser desfeitas. Interpreter Dada uma linguagem, define uma representação para sua gramática, juntamente com um interpretador que usa a representação para interpretar sentenças nesta linguagem. 22

23 Iterator Fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua representação subjacente. Mediator Define um objeto que encapsula como um conjunto de objetos interage. O mediator promove o acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros, permitindo que você varie suas interações independentemente. 23

24 Memento Sem violar a encapsulação, captura e externaliza um estado interno de um objeto, de modo que o mesmo possa posteriormente ser restaurado para este estado. Observer Definie uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estados, todos os seus dependentes são automaticamente notificados e atualizados. 24

25 State Permite que um objeto altere seu comportamento quando seu estado interno muda. O objeto parecerá ter muda sua classe. Strategy Define uma família de algoritmos, encapsular cada um deles e fazê-los intercambiáveis. O strategy permite que o algoritmo varie independentemente dos clientes que o utilizam. 25

26 Template Method Define o esqueleto de um algoritmo em uma operação, postergando a definição de alguns passos para subclasses. O template method permite que as subclasses redefinam certos passos de um algoritmos sem mudar sua estrutura. Visitor Representa uma operação a ser executada sobre os elementos da estrutura de um objeto. O visitor permite que você defina uma nova operação sem mudar as classes dos elementos sobre os quais opera. 26

27 27

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões DCC / ICEx / UFMG Padrões de Projeto Padrões de Projeto Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Um padrão é uma descrição do problema e a essência da sua solução Documenta boas soluções para

Leia mais

Mas o que é mesmo Padrão de Projeto?

Mas o que é mesmo Padrão de Projeto? Mas o que é mesmo Padrão de Projeto? Um Padrão de Projeto descreve uma solução comprovada para um problema recorrente e conhecido no desenvolvimento de software orientado a objetos. Mas afinal, porque

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto

Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça. Introdução. Padrões de projeto Universidade Federal de Uberlândia Faculdade de Computação Prof. Fabiano Dorça Introdução Padrões de projeto Algumas definições... Um padrão de projeto (design pattern) é uma solução geral reutilizável

Leia mais

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico Reuso de Software Aula 03 Tópicos da Aula POO e Padrões de Projetos Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo reuso.software@gmail.com 12 Março 2012 Programação orientada a objetos Reuso de

Leia mais

b) Adapter, Bridge e Composite. c) Builder, Prototype e Singleton. d) Façade, Command e Decorator. e) Factory Method, Interpreter e Template Method.

b) Adapter, Bridge e Composite. c) Builder, Prototype e Singleton. d) Façade, Command e Decorator. e) Factory Method, Interpreter e Template Method. 1) Considere os diagramas de classes de análise fornecidos nos itens (a) e (b) abaixo, ambos de acordo com a notação da UML. Esses diagramas desejam representar o fato de que uma conta bancária pode estar

Leia mais

Padrões de Projeto de Software

Padrões de Projeto de Software Padrões de Projeto de Software Lista de Exercícios AV2-01 Luiz Leão luizleao@gmail.com http://www.luizleao.com Questão 1 Qual o objetivo dos padrões Comportamentais, segundo o catálogo GOF? Questão 1 Resposta

Leia mais

Programação Orientada a Objetos. Padrões Estruturais

Programação Orientada a Objetos. Padrões Estruturais Programação Orientada a Objetos Padrões Estruturais Cristiano Lehrer, M.Sc. Classificação dos Padrões de Projeto Propósito o que o padrão faz: Padrões de criação: abstraem o processo de criação de objetos

Leia mais

Módulo III Padrões GOF

Módulo III Padrões GOF Módulo III Padrões GOF Professores Eduardo Bezerra edubezerra@gmail.com Ismael H F Santos ismael@tecgraf.puc-rio.br April 05 Prof. Ismael H. F. Santos - ismael@tecgraf.puc-rio.br 1 Ementa Introdução aos

Leia mais

Notas de Aula 03: Introdução a Orientação a Objetos e a UML

Notas de Aula 03: Introdução a Orientação a Objetos e a UML Notas de Aula 03: Introdução a Orientação a Objetos e a UML Objetivos da aula: Introduzir os conceitos da Orientação à Objetos (O.O) Introduzir os conceitos da UML Relacionar os processos às ferramentas

Leia mais

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos

Programação para Games II. Professor Ariel da Silva Dias Orientação a Objetos Programação para Games II Professor Ariel da Silva Dias Orientação a Objetos Pacotes Pacotes são um modo de organizar classes e interfaces Um programa pode ser formado por centenas de classes individiduais;

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 11 Padrões GoF (Bridge e Decorator) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton

Leia mais

Padrões Comportamentais

Padrões Comportamentais Padrões Comportamentais Parte 1 Soluções Reutilizáveis de Software Orientado a Objetos Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br) Padrões de Projeto Comportamentais 1. Chain of Responsibility 2.

Leia mais

Programação Orientada a Objetos. Padrões Comportamentais

Programação Orientada a Objetos. Padrões Comportamentais Programação Orientada a Objetos Padrões Comportamentais Cristiano Lehrer, M.Sc. Classificação dos Padrões de Projeto Propósito o que o padrão faz: Padrões de criação: abstraem o processo de criação de

Leia mais

Linguagem de Modelagem Unificada UML

Linguagem de Modelagem Unificada UML Linguagem de Modelagem Unificada UML Parte 1 Rosemary Silveira Filgueiras Melo rosesfmelo@hotmail.com 1 Tópicos abordados Paradigma Orientado a Objetos Linguagem UML e seus principais diagramas Diagramas

Leia mais

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE 1 INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA UML UNIFIED MODELING LANGUAGE Nickerson Fonseca Ferreira nickerson.ferreira@ifrn.edu.br O que é?? 2 A UML

Leia mais

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira

Engenharia de Software. Aula 10 Representação dos Conceitos de Orientação a Objetos. Prof. Me. Rogério Ferreira Engenharia de Software Aula 10 Representação dos Conceitos de Orientação a Objetos Prof. Me. Rogério Ferreira 2 Roteiro Representação dos Conceitos OO Mensagens Navegabilidade Pacotes Encapsulamento Herança

Leia mais

" ##$#$!% # & #$#$ !!!!"!

 ##$#$!% # & #$#$ !!!!! " ##$#$!% # & #$#$ Abstract Factory, Builder, Singleton, Factory Method, Prototype, Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy, Chain of Responsability, Command, Interpreter, Iterator,

Leia mais

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos joao.queiroz@ifrn.edu.br Roteiro A importância da UML para projetar sistemas. Principais características do diagrama de classes e de sequência.

Leia mais

Princípios de Engenharia de Software Resumo 8 Semana 8 Versão: 1.0 Data: 05/10/04

Princípios de Engenharia de Software Resumo 8 Semana 8 Versão: 1.0 Data: 05/10/04 Alunos: Ariane Bueno 0114784-9 Elaine A. de Carvalho 0114633-1 Gabriel Ramos 0114838» O QUE APRENDI ASSUNTO: ARQUITETURA ASSUNTO: Notas de aula referentes às aulas de 30/09/04, Arquitetura de Software(Shaw),

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Projeto e Implementação Padrões de Projeto Msc. Carlos Mar 04/2014 REVISÃO: ORIENTAÇÃO A OBJETOS Msc. Carlos Mar - Abr/2014 Conceitos Fundamentais Classe Objeto Atributos Métodos

Leia mais

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory. Escopo Classe Objeto Finalidade Criação Estrutural Comportamental Factory Method Interperter Abstract Factory Builder Prototype Bridge Composite Facade Flyweight Proxy Chain of Responsibility Command Iterator

Leia mais

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks

3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks 48 3 Uma Abordagem Orientada a Aspectos para o Desenvolvimento de Frameworks Este capítulo apresenta uma visão geral da contribuição principal deste trabalho: uma abordagem orientada a aspectos para o

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 10 Padrões GoF (Protoype e Façade) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton

Leia mais

Introdução à UML. Prof. Jesus José de Oliveira Neto

Introdução à UML. Prof. Jesus José de Oliveira Neto Introdução à UML Prof. Jesus José de Oliveira Neto UML Linguagem de Modelagem Unificada Linguagem visual utilizada para modelar softwares baseados no paradigma de orientação a objetos UML não é uma linguagem

Leia mais

INF011 Padrões de Projeto Introdução

INF011 Padrões de Projeto Introdução INF011 Padrões de Projeto 01 - Introdução Sandro Santos Andrade sandroandrade@ifba.edu.br Instituto Federal de Educação, Ciência e Tecnologia da Bahia Departamento de Tecnologia Eletro-Eletrônica Graduação

Leia mais

Modelo do Mundo Real. Abstração. Interpretação

Modelo do Mundo Real. Abstração. Interpretação Modelo do Mundo Real Mundo Real Abstração Interpretação Sistema de Software Modelo Algoritmo Abstração: O modelo precisa capturar apenas as características do mundo real que são importantes para o sistema

Leia mais

Conceitos de Programação Orientada a Objetos

Conceitos de Programação Orientada a Objetos Conceitos de Programação Orientada a Objetos flavio@facom.ufu.br 80 Por que a Orientação a Objetos? As abstrações podem corresponder às "coisas" do domínio do problema, facilitando o entendimento Esta

Leia mais

Padrões contexto problema solução

Padrões contexto problema solução Padrões Padrões são soluções para problemas específicos que ocorrem de forma recorrente em um determinado contexto que foram identificados a partir da experiência coletiva de desenvolvedores de software.

Leia mais

Modelagem Usando Orientação à Objetos (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Modelagem Usando Orientação à Objetos (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus Curso Disciplina Linguagem de Programação II Curso Engenharia da Computação Modelagem Usando Orientação à Objetos (Programação Orientada a Objetos) Site : http://www1.univap.br/~wagner/ec.html Prof. Responsáveis

Leia mais

O PARADIGMA ORIENTADO POR OBJETOS

O PARADIGMA ORIENTADO POR OBJETOS O PARADIGMA ORIENTADO POR OBJETOS A idéia básica do paradigma orientado a objetos é imaginar que programas simulam o mundo real: um mundo povoado de objetos. Dessa maneira, linguagens baseadas nos conceitos

Leia mais

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA 2º Teste 2012/2013 1º Semestre 201301171830 1/7 2º Teste 2012/2013 1º Semestre 17 de Janeiro de 2013, 11:30 (120 minutos) Nome: Número: Primeira Parte (7 valores) PERGUNTA NOTA 1.1.1 1.1.2 1.1.3 1.2 1.3

Leia mais

Padrões Comportamentais

Padrões Comportamentais Padrões Comportamentais Parte 2 Soluções Reutilizáveis de Software Orientado a Objetos Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br) Padrões de Projeto Comportamentais 1. Chain of Responsibility 2.

Leia mais

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos.

AULA 02. OBJETIVO: Características da Linguagem Orientada a Objetos. AULA 02 OBJETIVO: Características da Linguagem Orientada a Objetos. HABILIDADES TRABALHADAS: Comparação das características das linguagens orientadas a objetos frente às linguagens estruturadas. Conhecimentos

Leia mais

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc.

Programação Orientada a Objetos 2 Flávio de Oliveira Silva, M.Sc. Orientação a Objetos Revisão Conceitos CLASSE CLASSIFICAÇÃO GENERALIZAÇÃO ESPECIALIZAÇÃO HERANÇA INTERFACES POLIMORFISMO SOBRECARGA ENCAPSULAMENTO ABSTRAÇÃO MODULARIZAÇÃO 9 CLASSE Classe é um agrupamento

Leia mais

Ciência da Computação. Análise e Projeto Orientado a Objetos UML. Anderson Belgamo

Ciência da Computação. Análise e Projeto Orientado a Objetos UML. Anderson Belgamo Ciência da Computação Análise e Projeto Orientado a Objetos UML Anderson Belgamo 1 Evolução do Software O rápido crescimento da capacidade computacional das máquinas resultou na demanda por sistemas de

Leia mais

O USO DOS PADRÕES DE PROJETO GOF NA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

O USO DOS PADRÕES DE PROJETO GOF NA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS O USO DOS PADRÕES DE PROJETO GOF NA ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Revista UNILUS Ensino e Pesquisa v. 13, n. 30, jan./mar. 2016 ISSN 2318-2083 (eletrônico) Claudio Costa Matos Graduando no curso

Leia mais

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos) 1/8 Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos) Nome: Primeira Parte (7 valores) PERGUNTA NOTA 1.1.1 1.1.2 1.1.3 1.2 1.3 1.4 Segunda Parte (3 valores) PERGUNTA RESPOSTA 2.1 2.2 2.3

Leia mais

UML (Unified Modelling Language)

UML (Unified Modelling Language) UML (Unified Modelling Language) Curso de Especialização DEINF - UFMA Desenvolvimento Orientado a Objetos Prof. Geraldo Braz Junior Referências: Booch, G. et al. The Unified Modeling Language User Guide

Leia mais

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA AULA 15 PROFª BRUNO CALEGARO Santa Maria, 08 de Novembro de 2013. Contextualização Nas próximas aula iremos começar a modelar e projetar sistemas

Leia mais

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42

Diagrama de Classes. Régis Patrick Silva Simão. Régis Simão Diagrama de Classes 1/42 Diagrama de Classes Régis Patrick Silva Simão Régis Simão Diagrama de Classes 1/42 Agenda Introdução Objetos Classes Atributos Operações & Métodos Relacionamentos Relacionamento: Associação Nome de Relacionamento

Leia mais

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto

Análise e Projeto. Padrões de Análise, Arquitetura e Projeto Análise e Projeto Padrões de Análise, Arquitetura e Projeto 33 Padrões de Arquitetura Padrões Nome do padrão Problema: quando aplicar o padrão? Descreve o problema e seu contexto. Solução: elementos que

Leia mais

Padrões de Projeto de Software

Padrões de Projeto de Software Padrões de Projeto de Software Luiz Leão luizleao@gmail.com http://www.luizleao.com Introdução O que é? Como descrever? Principais Padrões de Projetos Unidade 2 Padrões GoF PADRÕES CRIAÇÃO Abstract Factory

Leia mais

DIAGRAMAS DE CLASSE UML

DIAGRAMAS DE CLASSE UML DIAGRAMAS DE CLASSE UML Projeto Detalhado de Software (PDS) Profa. Cynthia Pinheiro Antes de mais nada... Calendário de Reposições Aula 1: 27/10/2017, 8h-10h, Sala 8 Aula 2: A verificar Aula 3: A verificar

Leia mais

Engenharia de Software

Engenharia de Software Engenharia de Software Design Principles Representando SW em UML OO em C Pattens úteis para embedded Rodrigo M A Almeida Design Principles Design Principles são guias para decompor as funcionalidades e

Leia mais

Programação Orientada a Objetos. Padrões de Criação

Programação Orientada a Objetos. Padrões de Criação Programação Orientada a Objetos Padrões de Criação Cristiano Lehrer, M.Sc. Objetivos Apresentar cada um dos 23 padrões clássicos descrevendo: O problema que solucionam. A solução. Diagramas UML (Unified

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 05 Padrões GoF (Singleton e Iterator) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype

Leia mais

MODELAGEM DE SISTEMAS. Introdução a Computação e Engenharia de Software. Profa. Cynthia Pinheiro

MODELAGEM DE SISTEMAS. Introdução a Computação e Engenharia de Software. Profa. Cynthia Pinheiro MODELAGEM DE SISTEMAS Introdução a Computação e Engenharia de Software Profa. Cynthia Pinheiro Introdução Modelagem de Sistemas: A modelagem de um sistema auxilia o analista a entender a funcionalidade

Leia mais

1 Introdução. 1.1 Teoria dos Sistemas 23/4/2010

1 Introdução. 1.1 Teoria dos Sistemas 23/4/2010 1 1 Introdução 1.1 Teoria dos Sistemas 1.2 Constituição dos sistemas 1.3 Natureza dos sistemas 1.4 Parâmetros do sistema 1.5 Descrição de sistemas 1.6 Desafios enfrentados no desenvolvimento 1.7 Perfil

Leia mais

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos

Herança. Herança. Herança. Herança. Herança. Programação Orientada a Objetos e Ligação Dinâmica Programação Orientada a Objetos e Polimorfismo A é a contribuição original do paradigma de programação orientado a objetos Fundamentos chave do paradigma OO: Abstração de Dados A herança

Leia mais

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10 2/10 1.1. (1.5 val.) Os mecanismos de herança entre classes e de composição de objetos são, por vezes, apresentados como alternativos, face à disponibilização de funcionalidade a uma classe. Compare-os,

Leia mais

Conceitos de Programação Orientada a Objetos

Conceitos de Programação Orientada a Objetos Conceitos de Programação Orientada a Objetos Tatyana Bitencourt Com as técnicas de orientação a objeto, é possível obter resultados considerados impossíveis pensando de maneira estruturada. Como Java não

Leia mais

Orientação a Objetos (OO)

Orientação a Objetos (OO) CURSO: Ciência da Computação DATA: / / 2013 PERÍODO: 4 o. PROFESSOR: Andrey DISCIPLINA: Técnicas Alternativas de Programação AULA: 04 APRESENTAÇÃO: Hoje vamos discutir os conceitos de Orientação a Objetos.

Leia mais

BCC Engenharia de Software Professor Rodrigo Andrade

BCC Engenharia de Software Professor Rodrigo Andrade BCC Engenharia de Software 2017.1 Professor Rodrigo Andrade Aula Passada Implementação, Manutenção e Execução dos testes Implementação e Manutenção de Funcionalidades Qualidade de código visão caixa preta

Leia mais

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos Linguagem de Programação II Programação Orientada a Objetos Orientação a Objetos Prof. Alessandro Borges 2 Tópicos Introdução à Programação Orientada a Objetos Conceitos Objetivos Classes e Objetos Atributos

Leia mais

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP AULA 2 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila.

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Curso Profissional de Gestão e Programação de Sistemas Informáticos Disciplina: Programação e Sistemas de Informação Programação Orientada a Objetos Módulos 9/10/11 POO 2016/2017 História A OO surgiu no

Leia mais

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs Programação Orientada a Objetos Professor: André Luis Meneses Silva andreluis.ms@gmail.com br.geocities.com/programacao2ufs [ Conteúdo ] Objeto Mensagens Classe Encapsulamento Visibilidade Membros de Instância

Leia mais

Introdução a UML (Unified Modeling Language)

Introdução a UML (Unified Modeling Language) Introdução a UML (Unified Modeling Language) O que é a UML? Linguagem Gráfica de Modelagem para: Visualizar Especificar Construir Documentar Comunicar Artefatos de sistemas complexos Linguagem: vocabulário

Leia mais

Introdução. à UML. Histórico (cont.) Histórico Definição Benefícios Notação Diagrama de Classes Diagramas de Interação Conclusões Revisão

Introdução. à UML. Histórico (cont.) Histórico Definição Benefícios Notação Diagrama de Classes Diagramas de Interação Conclusões Revisão Sumário Introdução à UML BSI Bacharelado em Sistemas de Informação LOO Linguagens Orientadas a Objetos Humberto Mossri de Almeida hmossri_cursos@yahoo.com.br Marcelo Nassau Malta nassau_cursos@yahoo.com.br

Leia mais

Padrões Comportamentais. Padrões de Projeto Comportamentais. Motivação. Chain of Responsibility (CoR) Padrão Chain of Responsibility

Padrões Comportamentais. Padrões de Projeto Comportamentais. Motivação. Chain of Responsibility (CoR) Padrão Chain of Responsibility DCC / ICEx / UFMG Padrões Comportamentais Padrões de Projeto Comportamentais Command Observer Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Interpreter Iterator Memento Strategy Template Method

Leia mais

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos Programação Orientada a Objetos Vagner Luz do Carmo - Vluzrmos Questão 1 Dada a seguinte classe na linguagem JAVA: public class Carro { public String retornacor(){ ; return Azul ; private String retornachassi(){

Leia mais

Capítulo 2. Orientação a Objetos

Capítulo 2. Orientação a Objetos Capítulo 2 Orientação a Objetos Princípios da Orientação a Objetos Os princípios da orientação a objetos afetam todo o processo de desenvolvimento de software: Seres humanos pensam em termos de substantivos

Leia mais

Classes e Objetos. Sintaxe de classe em Java

Classes e Objetos. Sintaxe de classe em Java Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados

Leia mais

UML. Diagrama de Classe

UML. Diagrama de Classe UML Diagrama de Classe Em UML as classes são representadas por um retângulo dividido em três compartimentos: o compartimento de nome, que conterá apenas o nome da classe modelada, o de atributos, que possuirá

Leia mais

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE)

MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) MODELAGEM COM A UML (UNIFIED MODELING LANGUAGE) g BREVE HISTÓRICO g CARACTERÍSTICAS g CONCEITOS DE PROGRAMAÇÃO ORIENTADA A OBJETOS g MODELAGEM DE ANÁLISE E DE PROJETO 1 I. BREVE HISTÓRICO Em fins dos anos

Leia mais

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo

15/04/2013. Outro Diagrama de Classes. Primeiro Diagrama de Classes. Diagrama de Classes. Atributos. Eduardo Figueiredo DCC / ICEx / UFMG Primeiro Diagrama de Classes Diagrama de Classes Eduardo Figueiredo http://www.dcc.ufmg.br/~figueiredo Professor Aluno matricula Outro Diagrama de Classes Diagrama de Classes Serve de

Leia mais

FUNDAÇÃO UNIVERSIDADE ESTADUAL DE MARINGÁ

FUNDAÇÃO UNIVERSIDADE ESTADUAL DE MARINGÁ FUNDAÇÃO UNIVERSIDADE ESTADUAL DE MARINGÁ Centro de Tecnologia - CTC Departamento de Informática - DIN Programa de Pós-Graduação em Ciência da Computação PCC ESTÁGIO DE DOCÊNCIA II Disciplina: Engenharia

Leia mais

Engenharia de Software. Prof. Me. Clodoaldo Brasilino

Engenharia de Software. Prof. Me. Clodoaldo Brasilino Engenharia de Software Prof. Me. Clodoaldo Brasilino clodoaldo.neto@ifpi.edu.br Acompanhamento da Disciplina 1. Introdução à Engenharia de Software 2. Processos de Software e Projetos 3. Metodologia Ágil

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Introdução Alguns conceitos importantes Orientação a Objetos Alguns conceitos importantes Programação Estruturada X Programação OO Classes Objetos Construtores e Destrutores

Leia mais

Introdução a UML e seus diagramas

Introdução a UML e seus diagramas Introdução a UML e seus diagramas A Unified Modelling Language (UML) é uma linguagem ou notação de diagramas para especificar, visualizar e documentar modelos de software orientados por objetos. O UML

Leia mais

Engenharia de Software II e III - Material para estudo Diagrama de Classe

Engenharia de Software II e III - Material para estudo Diagrama de Classe 1-Orientação a Objetos ANÁLISE ESTRUTURADA X ANÁLISE O.O. Enfoque Tradicional: Conjunto de programas que executam processos sobre dados. Enfoque Baseado em Objetos: Conjunto de coisas que tem características

Leia mais

Diagrama de Classes. Classes. Relacionamentos. Atributos Métodos. Associação. Generalização Dependência Realização. Agregação Composição

Diagrama de Classes. Classes. Relacionamentos. Atributos Métodos. Associação. Generalização Dependência Realização. Agregação Composição Diagrama de Classes Diagrama de Classes Classes Atributos Métodos Relacionamentos Associação Agregação Composição Generalização Dependência Realização Sobre Classes São o elemento mais importante de qualquer

Leia mais

Padrões de Projeto de Software Orientado a Objetos

Padrões de Projeto de Software Orientado a Objetos Padrões de Projeto de Software Orientado a Objetos Ricardo Argenton Ramos [Baseado nos slides do professor Fabio Kon - USP] 1 Padrões de Projeto de Software OO Também conhecidos como Padrões de Desenho

Leia mais

Engenharia de Software II e III - Introdução ao Diagrama de Classe

Engenharia de Software II e III - Introdução ao Diagrama de Classe 1-Orientação a Objetos ANÁLISE ESTRUTURADA X ANÁLISE O.O. Enfoque Tradicional: Conjunto de programas que executam processos sobre dados. Enfoque Baseado em Objetos: Conjunto de coisas que tem características

Leia mais

Introdução ao Java. Prof. Herbert Rausch Fernandes

Introdução ao Java. Prof. Herbert Rausch Fernandes Introdução ao Java Prof. Herbert Rausch Fernandes Orientação a Objetos Programação Orientada por Objetos: é a construção de sistemas de software como uma coleção estruturada de implementações de tipos

Leia mais

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios

Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Engenharia de Software e Gerência de Projetos Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Cronograma das Aulas. Hoje você está na aula Semana

Leia mais

Protótipo de Editor Gráfico de Fluxogramas para Representação de Comandos da Linguagem Portugol

Protótipo de Editor Gráfico de Fluxogramas para Representação de Comandos da Linguagem Portugol Protótipo de Editor Gráfico de Fluxogramas para Representação de Comandos da Linguagem Portugol Aluno Luís Carlos Seifert de Souza Orientador Wilson Pedro Carli Roteiro da Apresentação Introdução Motivação

Leia mais

Diagramas de Classes. ESII Profª. Andressa Falcade URI Santiago

Diagramas de Classes. ESII Profª. Andressa Falcade URI Santiago Diagramas de Classes Conceitos Básicos O caso de uso fornece uma perspectiva do sistema de um ponto de vista externo (do ator) Internamente os objetos colaboram para atender às funcionalidades do sistema

Leia mais

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos Programação Avançada Padrões de Projeto de Software 1 Fonte: Oswaldo B. Peres e K19 Treinamentos Introdução Projetar software OO reusável e de boa qualidade é uma tarefa difícil; Para realizar essa tarefa

Leia mais

ACH2002. Orientação a Objetos

ACH2002. Orientação a Objetos ACH2002 Orientação a Objetos Professores: Delano Medeiros Beder Fátima L. S. Nunes EACH USP O que é abstração? Abstração s.f. Operação do espírito, que isola de uma noção um elemento, negligenciando os

Leia mais

Arquitectura de Sistemas de Software

Arquitectura de Sistemas de Software Arquitectura de Sistemas de Software Ademar Aguiar www.fe.up.pt/~aaguiar ademar.aguiar@fe.up.pt Arquitectura de Sistemas de Software, LEIC/MEI, 2003/2004 1 Arquitectar... Arquitectar uma pequena cabana

Leia mais

Introdução aos Padrões de Projeto. Sylvio Barbon Jr

Introdução aos Padrões de Projeto. Sylvio Barbon Jr Introdução aos Padrões de Projeto Sylvio Barbon Jr 25 février 2016 Introdução Disciplina Engenharia de Software : São Tratados principalmente os tesmas : Metodologia : No desenvolvimento

Leia mais

Requisitos de sistemas

Requisitos de sistemas Requisitos de sistemas Unidade III - Casos de Uso Identificação de casos de uso Conceitos de orientação a objetos Modelagem do diagrama de classes e casos de uso 1 Casos de uso CONCEITO Especifica o comportamento

Leia mais

Diagrama de Classes 2017

Diagrama de Classes 2017 2017 Visa permitir a visualização das classes que comporão o sistema junto com os respectivos atributos e métodos, bem como mostrar como as classes se relacionam, complementam e transmitem informações

Leia mais

Q d( ) P. a( ) c( ) e( ) c( ) S. c( ) d( )

Q d( ) P. a( ) c( ) e( ) c( ) S. c( ) d( ) ELEMENTOS BÁSICOS DA LINGUAGEM JAVA Patricia Della Méa Plentz INE-CTC-UFSC E-Mail: plentz@inf.ufsc.br URL: http://moodle.ufsc.br INE5605-Turma 0238B Sumário 2.1 Classes e Objetos na POO 2.2 2 Revisão da

Leia mais

Televisao tamanho tela emitirsom. conectarperifericos

Televisao tamanho tela emitirsom. conectarperifericos 1 - Introdução a Programação Orientada a Objeto Para tentar solucionar o problema do baixo reaproveitamento de código, surgiu a idéia da Programação Orientada a Objeto (POO). A POO não é nova, sua formulação

Leia mais

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; Tudo no mundo real pode ser representado por meio do conceito de "objeto": uma planta, uma mesa, uma pessoa, um sentimento,

Leia mais

Introdução à Análise e Projeto de Sistemas

Introdução à Análise e Projeto de Sistemas Introdução à I. O Que vamos fazer na Disciplina? Saber uma linguagem de programação orientada a objeto (OO) não é suficiente para criar sistemas OO Tem que saber Análise e Projeto OO (APOO) Isto é, Análise

Leia mais

Daniel Wildt

Daniel Wildt Orientação a Objetos 1 Daniel Wildt http://danielwildt.blogspot.com Agenda 2 Orientação a Objetos Classe x Objeto Representação classe Atributos / operações Construtores e Destrutores Liberando memória

Leia mais

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA

UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO DE CIÊNCIAS EXATAS E TECNOLÓGIA LPOO - Linguagem de Programação Orientada a Objetos Prof. Msc. Célio R. Castelano Página 1 de 7 Curso Ciência da Computação Professor Célio Ricardo Castelano UNIVERSIDADE PAULISTA - UNIP ICET INSTITUTO

Leia mais

27) Em relação aos Projetos de Sistemas de Software, assinale a sequência correta de desenvolvimento de um sistema:

27) Em relação aos Projetos de Sistemas de Software, assinale a sequência correta de desenvolvimento de um sistema: Modelos de Ciclo de Vida e Metodologias de Software 33) No SCRUM, uma iteração que segue um ciclo (PDCA) e entrega incremento de software pronto é denominada: A) Backlog. B) Sprint. C) Daily scrum. D)

Leia mais

Padrões GoF. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Padrões GoF. Leonardo Gresta Paulino Murta leomurta@ic.uff.br Padrões GoF Leonardo Gresta Paulino Murta leomurta@ic.uff.br Agenda Introdução Padrões de Criação Padrões de Estrutura Padrões de comportamento Leonardo Murta Padrões GoF 2 Introdução Os padrões GoF (Gamma

Leia mais

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

TÉCNICAS DE ORIENTAÇÃO A OBJETOS TÉCNICAS DE ORIENTAÇÃO A OBJETOS APLICAÇÃO EM: C# E JAVA Sumário INTRODUÇÃO... 4 PARADIGMAS DE PROGRAMAÇÃO... 5 PROGRAMAÇÃO PROCEDURAL... 5 PROGRAMAÇÃO ESTRUTURADA... 5 PROGRAMAÇÃO ORIENTADA A OBJETOS...

Leia mais

Design Patterns. Viviane Torres da Silva

Design Patterns. Viviane Torres da Silva Design Patterns Viviane Torres da Silva viviane.silva@ic.uff.br http://www.ic.uff.br/~viviane.silva/2010.1/es1 Sumário Reuso de Software Introdução Benefícios e Desvantagens Visão do Reuso Padrões de Projeto

Leia mais

Análise e Projeto Orientados por Objetos

Análise e Projeto Orientados por Objetos Análise e Projeto Orientados por Objetos Aula 09 Padrões GoF (Adapter e Composite) Edirlei Soares de Lima Padrões GoF Criação: Abstract Factory Builder Factory Method Prototype Singleton

Leia mais

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc. PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br ROTEIRO 4. Técnicas de Orientação a Objetos Classes e objetos Herança Métodos Subscritos

Leia mais

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos) Orientação a Objetos Parte I Introdução a POO (Programação Orientada a Objetos) Histórico Gerações de Linguagens de Programação Primeira Geração: Linguagem de máquina Segunda Geração: Linguagem de montagem

Leia mais

2. Introdução à Programação e Análise. Orientada a Objetos. Programação Orientada a Objetos em C O que é a Programação Orientada a Objetos?

2. Introdução à Programação e Análise. Orientada a Objetos. Programação Orientada a Objetos em C O que é a Programação Orientada a Objetos? Programação Orientada a Objetos em C++ Renato Cardoso Mesquita Departamento de Eng. Elétrica da UFMG renato@cpdee.ufmg.br 2. Introdução à Programação e Análise.......... Orientada a Objetos 2.1. O que

Leia mais