Vous êtes sur la page 1sur 12

Programação Orientada a Objeto – Anthony Sintes

Prof.: Alex Oliveira

Precursores da POO é transparente, todos os outros objetos se


beneficiarão automaticamente do aprimoramento.
Extensível – O software não é estático, ele deve
crescer e mudar com o passar do tempo, para
permanecer útil.
Oportuno – ​A POO ​diminui o tempo do ciclo de
desenvolvimento, fornecendo software confiável,
reutilizável e facilmente extensível.

O estado de um Objeto é o significado


combinado das variáveis internas do objeto.

Programação Modular divide os programas em Uma ​variável Interna é um valor mantido


vários componentes ou módulos constituintes. dentro de um objeto.
Programação Procedural separa os dados e os
procedimentos, os módulos combinam os dois. Um A ​Implementação define como algo é feito. Em
módulo consiste consiste em dados e termos de programação, Implementação é código.
procedimentos, para manipular esses dados.
Um ​Objeto é uma construção de software que
OO é a abreviatura de orientado a objetos. OO é encapsula estado e comportamento. Os objetos
um termo geral que inclui qualquer estilo de permitem que você modele seu software em
desenvolvimento que seja baseado no conceito de termos reais de abstração.
objeto – Uma entidade que exibe características e
comportamentos. Uma ​Classe define os atributos e
A Programação orientada a objetos define seis comportamentos comuns compartilhados por um
objetivos sobrepostos para desenvolvimento de tipo de objeto. Os objetos de certo tipo ou
Software. A POO se esmera em produzir software classificação compartilham os mesmos
que tenha as seguintes características: comportamentos e atributos. As classes atuam de
forma muito parecida com um cortador de molde
Natural – Problemas mais inteligíveis . Em vez de ou biscoito, no sentido de que você use uma classe
programar em termos de regiões de memória, você para criar ou ​instanciar um objeto​.
pode programar usando terminologia de seu
problema em particular. Atributos são características de uma classe
Confiável – A natureza modular dos objetos visíveis externamente. A cor dos olhos e a cor dos
permite que você faça alterações em uma parte de cabelos são exemplos de atributos.
seu programa, sem afetar outras partes. Os objetos
isolam o conhecimento e a responsabilidade de OBS: Um objeto pode expor um atributo
onde pertencem. fornecendo um link direto a alguma variável
Reutilizável – ​Pode-se reutilizar prontamente interna ou retornando o valor através de um
classes orientadas a objetos bem feitas, método.
reutilizando objetos em muitos programas Comportamento é uma ação executada por um
diferentes. objeto quando passada uma mensagem ou em
Manutenível – ​Pode-se corrigir um problema em resposta a uma mudança de estado: é algo que o
um lugar. Como uma mudança na implementação objeto faz. Um objeto pode pode exercer o
1
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

comportamento do outro, executando uma A ​Interface lista os serviços fornecidos por um


operação sobre esse objeto. Poderá ser visto os componente. A interface é um contrato com o
termos ​Chamada de Método, Chamada de Função, mundo exterior, que define exatamente o que uma
ou Passar uma Mensagem​, usados em vez de entidade externa pode fazer com o objeto. Uma
executar uma operação. interface é o painel de controle do objeto.

Construtores são métodos usados para A ​Implementação define como um


inicializar objetos durante sua instanciação. comportamento realmente fornece um serviço. A
Chama-se criação de objetos de ​Instanciação implementação define os detalhes internos dos
porque ela cria uma instância do objeto na classe. componentes.

Acessores dão acesso aos dados internos de um A maioria das linguagens OO suporta três
objeto. Entretanto, os acessores ocultam o fato de níveis de acesso:
os dados estarem em uma variável, em uma Público – Garante o acesso a todos os objetos.
combinação de variáveis ou serem calculados. Os Protegido – Garante o acesso à instância, ou seja,
acessores permitem que você mude ou recupere o para aquele objeto, e para todas as subclasses.
valor e têm ‘efeitos colaterias’ sobre o estado Privado – Garante o acesso apenas para a
interno. instância, ou seja, para aquele objeto.

Os ​Mutantes permitem que você altere o estado As três características do ​Encapsulamento


interno de um objeto. Eficaz​ são:
Abstração – processo de simplificar um problema
Os ​Objetos se comunicam uns com os outros difícil.
através de ​mensagens​. As mensagens fazem com Ocultação da Implementação – tem a vantagem de
que um objeto realize algo. ​Passar uma Mensagem proteger seu objeto de seus usuários e protege os
é o mesmo que chamar um método para mudar o usuários de seu objeto do próprio objeto.
estado do objeto ou exercer um comportamento. Divisão de Responsabilidade – significa que cada
objeto deve executar uma função – sua
Os três pilares da Programação Orientada a responsabilidade – e executa-la bem.
Objetos são: Encapsulamento, Herança e
polimorfismo. TAD (Abstract Data Type – Tipo Abstrato de
Dados) é um conjunto de operações sobre esses
ENCAPSULAMENTO dados. Os TAD’s permitem que você defina novos
tipos na linguagem, ocultando dados internos e o
Encapsulamento é a característica da OO de estado, atrás de uma interface bem definida. Essa
ocultar partes independentes da implementação. interface apresenta o TAD como uma única
Permite que você construa partes ocultas da unidade atômica.
implementação do software, que atinjam uma
funcionalidade e ocultam os detalhes de Tipo define espécies de valores que você pode
implementação do mundo exterior; O usar em seus programas. Um tipo define o domínio
encapsulamento forma a base da Herança e do a partir do qual seus valores válidos podem ser
Polimorfismo. extraídos. Para inteiros positivos, são os números
sem partes fracionárias e que são maiores ou iguais
a zero. Para tipos estruturados, a definição é mais
2
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

complexa. Além do domínio, a definição de tipo Um pacote é um objeto cujo único propósito é
inclui quais operações são válidas no tipo e quais conter outro objeto ou primitiva. Um pacote
são os seus resultados. fornecerá qualquer número de métodos para obter
e manipular o valor possuído.
OBS: Lembre-se que adicionar uma nova classe
em seu sistema é o mesmo que criar um novo Variáveis de Classe - são variáveis que
Tipo. pertencem à classe e não a uma instância
específica, são compartilhadas entre todoas as
Um ​objeto de primeira classe é aquele que instâncias da classe.
pode ser usado exatamente da mesma maneira que
um tipo interno. Métodos de Classe são métodos que pertencem
à classe e não a uma instância específica. A
Um ​objeto de segunda classe è um tipo de operação executada pelo método não é dependente
objeto que você pode definir, mas não do estado de qualquer instância.
necessariamente usar, como faria com um tipo
interno. HERANÇA

O ​código fracamente acoplado é independente Herança - é um mecanismo que permite a você


da implementação de outros componentes. basear uma nova classe na definição de uma classe
previamente existente. Sua nova classe herda todos
O ​código fortemente acoplado é fortemente os atributos e comportamentos presentes na classe
vinculado à implementação de outros previamente existente.
componentes. Herança é um mecanismo que permite
estabelecer relacionamentos “é um” entre classes.
Código dependente é dependente da existência Esse relacionamento também permite que uma
de determinado tipo. O código dependente é subclasse herde os atributos e comportamentos de
inevitável. Entretanto, existem graus para uma Superclasse.
dependência aceitável e para a superdependência.
Delegação ​é o processo de um objeto passar
Encapsulamento Efetivo é a abstração mais uma mensagem para outro objeto, para atender
ocultação da implementação mais algum pedido.
responsabilidade.
“É um” ​descreve o relacionamento em que uma
Construtores Noargs são construtores que não classe é considerada do mesmo tipo de outra.
recebem nenhum argumento.
“Tem um” ​descreve o relacionamento em que
Objeto Imutável é aquele cujo objeto não muda, uma classe contém uma instãncia de outra classe.
uma vez construído (Constante).
Composição s​ ignifica que uma classe é
OBS: Uma linguagem orientada a objetos PURA implementada usando-se variáveis
suporta a noção de que tudo é um objeto, já uma internas(chamadas de variáveis membro), que
OO na considera tudo um objeto. contêm instâncias de outras classes.

3
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

Hierarquia de Herança - é um mapeamento do qualquer outro objeto chame o método, exceto


tipo árvore de relacionamentos que se formam quanto ao próprio objeto.
entre classes como resultado de herança.
Ao todo, existem três maneiras principais de
Classe Filha - é a classe que está herdando, usar herança:
também conhecida como Subclasse. Para reutilização de implementação – através da
composição, a herança torna o código
Classe Progenitora ou Mãe – é​ a classe da qual automaticamente disponível, como parte da nova
a filha herda diretamente, também conhecida como classe. Fazendo a classe nascer com
Superclasse. funcionalidade.
Para diferença – permite que voc~e programe
Uma Classe construída através da herança pode especificando apenas como uma classe filha difere
ter três tipos importantes de métodos e atributos: de sua classe progenitora.
Sobreposto – a nova classe herda o método ou Para substituição de tipo – Permite que você
atributo da progenitora, mas fornece uma nova descreva relacionamentos com capacidade de
definição. substituição.
Novo – a nova classe adiciona um método ou
atributo completamente novo. Programação por diferença ​significa herdar
Recursivo – a nova classe simplesmente herda um uma classe e adicionar apenas o código que torne a
método ou atributo da progenitora. nova classe diferente da classe herdada.

Sobrepor é​ o processo de uma filha pegar um Especialização é o processo de uma classe filha
método que aparece na progenitora e reescrevê-lo ser projetada em termos de como ela é diferente de
para mudar o comportamento do método. A sua progenitora. Quando tudo estiver dito e feito, a
sopreposição de um método é conhecida como definição de classe filha incluirá apenas os
Redefinição ​de um método. elementos que a tornem diferente de sua
progenitora.
Ao considerarmos a sobreposição de um
método ou atributo, é importante perceber que nem Ancestral é​ uma classe que aparece na
todos os métodos e atributos estão disponíveis para hierarquia de classe antes da progenitora.
sua filha sobrepor. A maioria das linguagens
orientadas a objetos tem alguma noção de controle Descendente ​é toda classe que aparece depois
de acesso. Esses níveis de acesso caem em três dela na hierarquia de classes.
categorias:
Privado – um nível de acesso que restringe o Classe Raiz (T ​ ambém conhecida como Classe
acesso apenas à classe. Base) é a classe superior da hierarquia de herança.
Protegido: um nível de acesso que restringe o
acesso à classe e às filhas. Classe Folha ​é uma classe sem filhas.
Público: um nível de acesso que permite o acesso a
todos e a qualquer um. OBS: é importante notar que as descendentes
refletirão as alterações feitas nas ancestrais.
Os métodos e atributos protegidos são aqueles
aos quais você deseja que apenas as subclasses Herança Múltipla – p​ ermite que um objeto
tenham acesso. O nível privado impede que herde diretamente de mais de uma classe.
4
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

Um Subtipo é​ um tipo que estende outro tipo A ​Sobrecarga t​ ambém conhecida como
através da herança. polimorfismo Ad-Hoc​, permite que você use o
mesmo nome de método para muitos métodos
Método declarado,​ mas não implementado, é diferentes. Cada método diferem apenas no
chamado de ​Método Abstrato. Somente classes número e no tipo de seus parâmetros.
abstratas podem ter métodos abstratos.
Conversão e​ ​Sobrecarga f​ reqüentemente
POLIMORFISMO andam lado a lado. A conversão também pode
fazer com que um método pareça como se fosse
Ter muitas formas. Em termos de programação, polimórfico. A coversão ocorre quando um
muitas formas significa que um único nome pode argumento de um tipo é convertido para o tipo
representar um código diferente, selecionado por esperado.
algum mecanismo automático, assim o
polimorfismo permite que um único nome Para se ter um Polimorfismo eficaz é preciso ter
expresse muitos comportamentos diferentes. encapsulamento e herança eficientes.
As linguagens podem ser ​Polimórficas (c​ om
polimorfismo) ou Monomórficas (​sem UML​ (Unified Modeling Language)
polimorfismo)​.
Linguagem de modelagem padrão, que consiste
Variável Polimórfica ​é uma variável que pode em várias notações gráficas que você pode usar
conter muitos tipos diferentes. para descrever a arquitetura inteira de seu
software.
Polimorfismo de Inclusão ou Puro p​ ermite que Notação gráfica utilizada para descrever a
você trate objetos relacionados genericamente. arquitetura inteira de seu software, incluindo
Torna mais fácil adicionar novos subtipos em um várias regras para distinguir entre desenhos
programa, pois não será preciso adicionar um corretos e incorretos, são regras que determinam a
método especificamente para esse novo tipo. UML como uma linguagem de modelagem;
Fornece um vocabulário comum que os
Polimorfismo Paramétrico ​permite que você desenvolvedores podem usar para transmitir seus
crie métodos e tipos genéricos. Assim como o projetos.
Polimorfismo de inclusão, os métodos e tipos
genéricos permitem que você codifique algo uma OBS: Linguagem de modelagem é diferente de
vez e faça isso trabalhar com muitos tipos processo de metodologia.
diferentes de argumentos.
Permite que você programe métodos genéricos Uma ​metodologia ou processo define um
retirando a referência de declarações de tipo de procedimento para projetar o software. As
parâmetro até o momento da execução. linguagens de modelagem capturam esse projeto
graficamente, ou seja, freqüentemente contém uma
A ​Sobreposição ​é um tipo importante de linguagem de modelagem.
polimorfismo.
Os métodos abstratos são freqüentemente OBS: UML não é única, mas é a padrão.
referidos como ​métodos Adiados​, pois você retarda Documentação também é útil para alguém que não
a definição para classes descendentes. conheça a linguagem de implementação.
5
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

depende da especificação de outro objeto. Se a


Notação básica de Classe especificação mudar, você precisará atualizar o
objeto dependente.
Uma caixa representa classe. A caixa do centro Especificação é uma maneira diferente de dizer
contém todos os atributos e a inferior contém todas interface ou comportamento.
as operações.
OBS: Em POO tenta-se minimizar ao máximo
A UML faz diferença entre operação e método, possível as dependências.
onde uma operação e um serviço que você solicita
de qualquer objeto de uma classe, enquanto um Associação – Indica que um objeto contém , ou
método é uma implementação específica da que está conectado a outro objeto.
operação.
O nome da Associação é um nome que descreve o
Os caracteres -, #, + transmitem a visibilidade de relacionamento.
um atributo ou de uma operação. O ​papel da associação é​ a parte que um objeto
desempenha em um relacionamento.
(-) significa privado, (#) significa protegido, (+)
significa público. A ​Multiplicidade indica quantos objetos podem
tomar parte na instância de uma associação.
Notação Avançada de Classe
Só se deve modelar associações quando um objeto
Tem a função de criar modelos mais descritivos. contiver outro objeto, ou quando um objeto usa
outro.
Estereótipo é um elemento da UML que permite Existem dois tipos de associação, são os de
que se amplie o vocabulário da própria linguagem Agregação e Composição​.
UML. Consiste em uma palavra ou frase incluídas
entre sinais de menor e maior duplos (<<>>), Agregação é um tipo especial de associação que
colocando um estereótipo ao lado de um elemento modela o relacionamento ‘tem um’ de
existente. relacionamentos Todo/Parte entre pares.

A UML fornece uma notação para transmitir que Relacionamento Todo/Parte descreve o
uma classe é abstrata, escrita em itálico. relacionamento entre objetos onde um objeto
contém outro.
Modelando um Relacionamento de Classe OBS: Pares significa que um objeto não é mais
importante do que o outro.
Um ​relacionamento descreve como as classes
interagem entre si. Na UML, um relacionamento é Você usa agregação quando o objetivo de seu
uma conexão entre dois ou mais elementos da modelo for descrever a estrutura de um
notação. relacionamento de pares.
Três tipos de alto nível de relacionamentos de
objetos: Dependência, Associação, Generalização. Composição não é um relacionamento entre pares.
Os objetos não são independentes uns dos outros.
Dependência – é o relacionamento mais simples Ao contrário da agregação, uma composição não
entre objetos. A dependência indica que um objeto modela relacionamentos Todo/Parte de pares.
6
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

Sistemas
Generelização – Indica um relacionamento entre o
geral e o específico, ou seja, a herança. Se existe È o termo da AOO para um conjunto de
esse relacionamento, se sabe que pode substituir objetos que interagem.
uma classe filha pela progenitora. Requisitos

Introdução à AOO São os recursos ou características que o


sistema deve ter para resolver determinado
É uma estratégia orientada a objetos para problema.
entender um problema. Se usa AOO para ajudar a Um modo de descobrir esses usos é através
entender o núcleo do problema que deseja da Análise de casos de uso. Através da análise será
resolver. definido vários casos de uso. Um caso de uso
descreverá como um usuário vai interagir com o
O Processo de desenvolvimento de software sistema.

As metodologias de software definem uma Análise de Casos de Uso


maneira comum de encarar o desenvolvimento de
software. Uma metodologia freqüentemente É o processo de descoberta de casos de uso através
conterá uma linguagem de modelagem (como da criação de cenários e histórias com usuários em
UML) e um processo. potencial ou existentes de um sistema.
Um caso de uso descreve a interação entre
Um Processo de Software mostra os vários o usuário do sistema e o sistema – como o usuário
estágios do desenvolvimento de software. utilizará o sistema do seu próprio ponto de vista.

Processo de Cascata Ator

Etapas: Análise de Requisitos, Projeto, É tudo que interage com o sistema. Pode
Implementação, teste. ser um usuário humano ou outro sistema de
Neste processo existe a realização etapa por etapa, computador.
mas sem volta para uma etapa anterior para
especializar. Variante

Uma variante de caso de uso é uma versão


Processo Iterativo
especializada de outro caso de uso mais geral.
Este processo permite alterações em qualquer ponto do
processo de desenvolvimento. Permite alteração adotando uma Cenário
estratégia iterativa e incremental, para desenvolvimento do
software.
É uma sequência ou fluxo de eventos entre
Estratégia iterativa – permite que você continuamente volte e refine o usuário e o sistema.
cada estágio do desenvolvimento.

Estratégia Incremental – Divide o trabalho de desenvolvimento em


Condições Prévias
várias iterações pequenas.
São aquelas condições que devem ser
satisfeitas para que um caso de uso comece.
7
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

Condições posteriores são os resultados de um de como elas vão interagir e obter suas
caso de uso.b informações.
Usando os termos do modo de construção,
Diagramas de Caso de Uso você usa o POO para criar as cópias heliográficas
de seu programa.
Diagrama de Interação – Ajudam a Os objetos freqüentemente delegarão
modelar os relacionamentos entra casos de uso. trabalho para outros objetos. Através de seu
Ajudam também a capturar as interações entre os projeto, você precisa identificar essas
vários atores participantes do sistema, e divide-se colaborações.
em:
Um objeto delega trabalho para colabores.
Diagrama de Seqüência – Demonstra arelação Colaboração é o relacionamento onde os
entre usuários do sistema. objetos interagem para realizar o mesmo
Diagrama de Colaboração – Chama a atenção para propósito.
a seqüência de eventos com o passar do tempo.
Cartão CRC é uma maneira de distribuir
Diagramas de Atividades responsabilidades e colaborações é através do uso
de cartões CRC (Classe responsabilidade
Ajudam a modelar processos que podem Colaboração)
ser executados em paralelo. Esses cartões ajudam a definir o propósito
de um objeto, chamando a atenção para as
Modelos de Domínio responsabilidades do objeto.
Ao desenvolver os cartões CRC, é preciso
Lista os objetos que você precisa para garantir que cada classe tenha apenas duas ou três
modelar corretamente o sistema. responsabilidades principais. Se você tiver mais
responsabilidades, deverão dividir a classe em
duas ou mais classes separadas.
POO (Projeto Orientado a objetos)
Ponto de Interação é qualquer lugar onde
POO é o processo de construir o modelo de objeto um objeto use outro.
de uma solução. Dito de outra maneira, POO é o Um Agente faz a mediação entre dois ou
processo de dividir uma solução nem vários mais objetos para atingir algum objetivo.
objetos constituintes.
O modelo de objeto é o projeto dos objetos
que aparecem na solução de um problema. O Reutilizações de Projeto utilizando padrões de
modelo final de objeto pode conter muitos objetos projeto
não encontrados no domínio. O modelo de objeto
descreverá as várias responsabilidades, Um padrão de Projeto é um conceito de
relacionamentos e estrutura do objeto. projeto reutilizável. Este consiste em quatro
O processo de POO o ajuda a descobrir elementos:
como você vai implementar a análise que
completou durante a AOO. Principalmente, o O nome do Padrão – Identifica exclusivamente
modelo de objeto que conterá as classes principais cada padrão do projeto.
do objeto, suas responsabilidades e uma definição O Problema
8
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

A Solução Um teste de Unidade é o dispositivo de


As Conseqüências teste de nível mais baixo. Um teste de unidade
envia uma mensagem para um objeto e depois
Padrão Adapter verifica se ele recebe o resultado esperado do
Um adaptador é um objeto que transforma objeto. Um teste de unidade verifica apenas um
a interface de outro objeto. recurso por vez.

Um Teste de Integração verifica se dois ou


Padrão Proxy mais objetos funcionam em conjunto corretamente.
Um proxy é um substituto ou lugar
reservado que intermédia o acesso ao objeto de Um teste de sistema examina o sistema
interesse real. Para todos os efeitos, O substituto é inteiro. Um teste de sistema verifica se um sistema
indistinguível do objeto real que intermédia. funciona conforme mencionado nos casos de uso e
se ele pode manipular normalmente situações
Padrão Iterator incomuns e inesperadas.
Uma interface Iterator fornece uma
interface genérica para iteragir sobre uma coleção. Os Testes de Regressão – examinam as
alterações nas partes do sistema que já foram
validadas. Quando uma alteração é feita, a parte
Construindo Software Confiável através de testes que foi alterada, assim como todas as partes
dependentes, deve se novamente testada.

Um Caso de Teste é o bloco de construção Uma Estrutura è um modelo de domínio


básico do processo de teste. O processo de teste reutilizável. A estrutura contém todas as classes
executa vários casos de teste para poder validar comuns a um domínio inteiro de problemas e serve
completamente um sistema. Cada caso de teste como a base para um aplicativo específico no
consiste em um conjunto de entradas e saídas domínio.
esperadas. O teste executará um caminho
específico através do sistema (caixa branca) ou Uma Classe Anônima é uma classe que
testará algum comportamento definido (caixa não tem nome. As classes anônimas não têm nome
preta). porque elas são simplesmente definidas ao serem
instanciadas. Elas não são declaradas em um
O teste de Caixa Preta testa se o sistema arquivo separado ou como uma classe interna.
funciona conforme o esperado. Dada uma entrada
específica, o teste de Caixa Preta testa se a saída O Acessório de teste prepara o conjunto de objetos
ou comportamento correto, visível externamente, sobre os quais um caso de teste atuará. Os
resulta conforme definido pela especificação da acessórios também são convenientes, pois eles
classe ou do sistema. permitem que você compartilhe o mesmo
acessório dentre um conjunto inteiro de casos de
No teste de caixa Branca, os testes são teste, sem ter de duplicar o código.
baseados unicamente na implementação de um
método. Os testes de caixa branca tentam atingir Um Objeto Falsificado é um substituto simplista
100% de cobertura de código. de um objeto real. Ele é chamado de objeto
falsificado, porque o objeto foi falsificado para
9
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

propósitos de teste. Embora o objeto falsificado


possa ter uma implementação simplista, ele pode
conter funcionalidade extra para ajudar nos testes.
São também conhecidos como Simuladores.
Esses objetos são intimamente relacionados aos
objetos stubs. Objetos stubs realizam apenas trocas
de mensagens enquanto que os objetos falsificados
se diferem no sentido de que eles realmente
executam alguma função, em vez de simplesmente
aceitarem uma chamada e retornarem algum valor
prévio.

Análise da Prova anterior

10
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

11
Programação Orientada a Objeto – Anthony Sintes
Prof.: Alex Oliveira

12

Vous aimerez peut-être aussi