SlideShare une entreprise Scribd logo
1  sur  76
Orientação a Objetos
para Testadores
@BrunoMurawski
Orientação a Objetos para Testadores
1
Muitas vezes aquele que
mais precisa é o que
menos se empenha
Orientação a Objetos para Testadores
1
Porque utilizar O.O.?
Validar CEP em vários Formulários
Qual a chance de esquecer de validar eles?
2
Orientação a Objetos para Testadores
Vantagens
Não espalhar a responsabilidade de validar em todo o
seu código!
Centralizar essa responsabilidade em um só lugar!
Diminui as chances de erros!
3
Orientação a Objetos para Testadores
Vantagens
Organiza o código
Diminui o Retrabalho (código duplicado e correções)
Encapsula a lógica dos Negócios
Responsabilidades centralizadas
4
Orientação a Objetos para Testadores
Vantagens
Diminui código escrito – c/ o Polimorfismo
5
Orientação a Objetos para Testadores
O que é um Objeto?
Características
Comportamento
Estado
5
Orientação a Objetos para Testadores
Estado
É como ele está em um determinado momento
Ex: o objeto televisão está ligado ou desligado?
5
Orientação a Objetos para Testadores
Características
Características dizem o que o objeto é
5
Orientação a Objetos para Testadores
Precisamos saber disso?
Precisamos para que possamos fazer a abstração dos
objetos que iremos trabalhar
Abstração de Objetos
Abstração de Dados
5
Orientação a Objetos para Testadores
Pensando em Pessoas
Objeto: pessoa
Contexto: comprar um produto em um e-commerce
O que toda pessoa tem?
6
Orientação a Objetos para Testadores
O que toda pessoa tem?
Características Físicas:
- Cabeça
- Olhos
- Boca
- Braços
- Mãos
- ...
7
Orientação a Objetos para Testadores
O que toda pessoa tem?
Características Sociais:
- Nome
- Data de Nascimento
- Sexo
- CPF
- ...
8
Orientação a Objetos para Testadores
Diagrama de Classe
14
Orientação a Objetos para Testadores
Instâncias
Criamos “instâncias” de pessoas
Podem ter ações e comportamentos
Declaramos o que cada pessoa tem no projeto(classe),
mas as instâncias é que podem armazenar esses dados
realmente!
Projeto de Pessoa -> Classe
Pessoas em si -> objetos
15
Orientação a Objetos para Testadores
Instâncias!
16
Orientação a Objetos para Testadores
Pessoa loide; Pessoa debi;
loide = new Pessoa( ); debi = new Pessoa( );
Sintaxe - Variáveis
tipo_variável nome_variável;
Exemplo:
int numero;
string nome;
Atribuição de valores para uma variável:
nome_variável = valor;
Int numero = 30;
17
Orientação a Objetos para Testadores
Mão na Massa
Vamos construir uma pessoa!
O que uma pessoa tem?
C#
17
Orientação a Objetos para Testadores
O que toda pessoa faz?
Ações e Comportamentos:
- Dorme
- Bebe
- Come
- Trabalha
- Estuda
9
Orientação a Objetos para Testadores
O que toda pessoa faz?
Ações e Comportamentos:
- Dorme
- Bebe
- Come
- Trabalha
- Estuda
- Cuida da vida alheia
9
Orientação a Objetos para Testadores
Pessoa faça algo!
Podemos perguntar a essa pessoa qual é a sua idade?
Essa pessoa pode dançar, dormir ou fazer qualquer
outra coisa?
10
Orientação a Objetos para Testadores
Pessoa faça algo!
NÃO!
10
Orientação a Objetos para Testadores
Blueprint de Pessoa
O que fizemos até agora foi projetar como uma pessoa
seria:
11
Orientação a Objetos para Testadores
Primeiro
Primeiro precisamos “criar” uma pessoa...
12
Orientação a Objetos para Testadores
Atividade
Acessar o que ele “tem” e “pedir” para ela fazer
algo...
13
Orientação a Objetos para Testadores
Código Gerado
... Classe PESSOA
18
Orientação a Objetos para Testadores
Código Gerado
... Objeto KREUSA
19
Orientação a Objetos para Testadores
Operadores
Tipos de operadores:
Relacionais (==, !=, >, <, >=, <=)
Lógicos (&&, ||, !)
Atribuição (=, +=, *=, /=)
Ternários.
21
Orientação a Objetos para Testadores
Tipos de Dados
Orientação a Objetos para Testadores
Palavra Chave Tipo Faixa de valores
bool System.Boolean true ou false
double System.Double ±5,0 × 10-324
a ±1,7 × 10308
float System.Single ±1,5 × 10-45
a ±3,4 × 1038
int System.Int32 -2.147.483.648 a 2.147.483.647
long System.Int64
-9,223,372,036,854,775,808 a
9,223,372,036,854,775,807
String System.String
“Meu nome é Bruno"
20
Casting e ToString
int x = 42;
String numeroEmTexto = x.ToString();
Console.WriteLine(numeroEmTexto );
Output: 42
17
Orientação a Objetos para Testadores
Atributos
Declaram o que toda a Classe deve ter
São declarados fora do bloco
São diferentes de variáveis temporárias
São variáveis Membros
21
Orientação a Objetos para Testadores
Métodos
Com ou sem Retorno
São as ações – Comportamento
21
Orientação a Objetos para Testadores
Métodos - Parâmetros
Ou argumentos
São informações passadas aos métodos
Passam o que o método precisa saber para me dar uma
resposta ou realizar determinada ação
21
Orientação a Objetos para Testadores
Void
Método SEM retorno
21
Orientação a Objetos para Testadores
Modificador Private
Protege o acesso aos atributos da classe
Permite o acesso somente dentro da classe
21
Orientação a Objetos para Testadores
Getters e Setters
São métodos responsáveis por Acessar e Modificar os
Atributos das classes
21
Orientação a Objetos para Testadores
Construtores
Vai inicializar as variáveis, cada um dos atributos da
classe
Se fosse não passar nada ele vai inicializar null
Mas podemos criar um Construtor passando Parâmetros
para criar o objeto
Devemos fazer o atributo do nosso objeto receber o
parâmetro recebido no Construtor
21
Orientação a Objetos para Testadores
This
This -> palavra reservada
This.nome;
O atributo nome desta Classe
Quando passamos um parâmetro igual ao nome do
atributo da classe utilizamos o this para indicar que
estamos pegando o atributo desta Classe
21
Orientação a Objetos para Testadores
This
Pessoa(string nome)
This.nome = nome;
21
Orientação a Objetos para Testadores
Encapsular
Esconder todos os membros de uma classe
Esconder como funcionam seus comportamentos
(métodos)
Fundamental para facilitar a Manutenção
Não precisaremos mudar uma regra de negócio em
vários lugares, mas sim em apenas um único lugar, já
que essa regra está encapsulada
21
Orientação a Objetos para Testadores
Encapsular
É sempre bom programar pensando na interface da sua
classe, como seus usuários a estarão utilizando, e não
somente em como ela vai funcionar. A implementação
em si, o conteúdo dos métodos, não tem tanta
importância para o usuário dessa classe,
uma vez que ele só precisa saber o que cada método
pretende fazer, e não como ele faz, pois isto pode
mudar com o tempo.
Essa frase vem do livro Design Patterns, de Eric
Gamma et al.
21
Orientação a Objetos para Testadores
Encapsular
Quando você dirige um carro, o que te importa são os
pedais e o volante (interface) e não o motor que você
está usando (implementação).
É claro que um motor diferente pode te dar melhores
resultados, mas o que ele faz é o mesmo que um
motor
menos potente, a diferença está em como ele faz
21
Orientação a Objetos para Testadores
Encapsular
Para trocar um carro a álcool para um a gasolina você
não precisa reaprender a dirigir! (trocar a
implementação dos métodos não precisa mudar a
interface, fazendo com que as outras classes
continuem usando eles da mesma maneira). ·
21
Orientação a Objetos para Testadores
Herança
Devemos deixar as Classes mais Genéricas
Não devemos criar uma outra classe e copiar o código
novamente
21
Orientação a Objetos para Testadores
Herança
Não devemos criar uma outra classe e copiar o código
novamente
Se precisarmos adicionar uma nova informação para todas
as pessoas, não precisaremos passar por todas as classes de
pessoas e adicionar esse atributo
Uma classe herda tudo que a outra tem
Super Classe ou Classe Pai
SubClasse Classe ou Classe Filha
21
Orientação a Objetos para Testadores
Herança
#Dica:
Devemos sempre fazer a pergunta:
É 1?
O (x) é um pássaro?
X = pato
X = ganso
X = cisne
21
Orientação a Objetos para Testadores
Herança
Extensão da Classe Pai
Classe Filha possui possuirá também os atributos de definidos na
classe Pai
Herda Todos os Atributos e Métodos da Classe Pai
@Override - deixar explícito no seu código que determinador
método é a reescrita de um método da sua classe mãe
Uma classe pode ter várias filhas, mas pode ter apenas uma mãe,
é a chamada herança simples
21
Orientação a Objetos para Testadores
21
Orientação a Objetos para Testadores
Herança
Cuidado: herda os atributos e métodos privados,
porém não consegue acessá-los diretamente.
Para acessar um membro privado na filha
indiretamente, seria necessário que a mãe expusesse
um outro método visível que invocasse esse atributo
ou método privado
21
Orientação a Objetos para Testadores
Associação
Representa um relacionamento entre classes onde uma
das classes está presente como atributo da outra
FAZ PARTE?
Roda FAZ PARTE do Carro
N x N
1 x N
1 x 1
21
Orientação a Objetos para Testadores
Composição
Informa que uma classe FAZ PARTE de outra de forma EXCLUSIVA
Os objetos são independentes
Um aluno pode existir sem a necessidade de um professor e vice e
versa
Indiferente do relacionamento entre eles, ambos podem existir
sem o outro
N alunos para N professores
1 Empresa (CWI) para N funcionários
21
Orientação a Objetos para Testadores
Composição
Se excluir a classe responsável pelo relacionamento,
então DEVE excluir a classe que ele possui
relacionamento
21
Orientação a Objetos para Testadores
Agregação
Informa que uma classe FAZ PARTE de outra, mas NÃO
de forma EXCLUSIVA
Representa um todo dividido em várias partes
Quando o relacionamento é do tipo Faz parte
1 p/ N
Tester faz parte do Time de Desenvolvimento
21
Orientação a Objetos para Testadores
Agregação
Se excluir a classe responsável pelo relacionamento
NÃO DEVE excluir a classe que ele possui
relacionamento
21
Orientação a Objetos para Testadores
Private
Então porque usar private? Depois de um tempo
programando orientado a objetos, você vai começar a
sentir que nem sempre é uma boa ideia deixar que a
classe filha acesse os atributos da classe mãe, pois isso
quebra um pouco a ideia de que só aquela classe
deveria manipular seus atributos.
Essa é uma discussão um pouco mais avançada.
O tipo ou membro pode ser acessado somente pelo
código na mesma classe
21
Orientação a Objetos para Testadores
Static
É uma classe ou atributo que é comum a todos os
objetos criados a partir dela/dele
Ex: classe de iniciação de projeto
Atributo resultadoSoma
No decorrer do programa podemos ter em diversas
partes do sistema uma chamada ao método Somar()
Se ele mandar o resultado da soma para um atributo
static o resultado será sempre o mesmo em todo
sistema
21
Orientação a Objetos para Testadores
Protected
E se precisamos acessar os atributos que herdamos?
Não gostaríamos de deixar os atributos de Pessoa,
public, pois dessa maneira qualquer um poderia
alterar os atributos dos objetos deste tipo.
Existe um outro modificador de acesso, o
PROTECTED, que fica entre o private e o public.
Um atributo protected só pode ser acessado (visível)
pela própria classe e por suas subclasses
21
Orientação a Objetos para Testadores
Acoplamento
O uso de herança aumenta o acoplamento entre as
classes, isto é, o quanto uma classe depende de outra.
A relação entre classe mãe e filha é muito forte e isso
acaba fazendo com que o programador das classes
filhas tenha que conhecer a implementação da classe
pai e vice-versa - fica difícil fazer uma mudança
pontual no sistema.
21
Orientação a Objetos para Testadores
Classes Abstratas
Classe que define as características e comportamentos
de um conjunto de objetos
Mas, nem todas as classes são feitas para serem
instanciadas
Existem classes que são criadas para conter/agrupar
características comuns a diversas classes e então ser
herdadas por elas
21
Orientação a Objetos para Testadores
Classes Abstratas
Palavra chave Abstract
Só consigo instanciar as classes filhas delas
21
Orientação a Objetos para Testadores
Métodos Abstratos
Classes abstratas podem ser utilizadas para prover a
definição de métodos que devem ser implementados
em todas as suas classes filhas sem apresentar uma
implementação para esses métodos
Toda classe que possui pelo menos um método abstrato
é uma classe abstrata, mas uma classe pode ser
abstrata sem possuir nenhum método abstrato
Ex: Classe Simular
21
Orientação a Objetos para Testadores
Abstract
Usamos a palavra chave abstract para impedir que a classe
possa ser instanciada
O problema é instanciar a classe - criar referência, você
pode. Se ela não pode ser instanciada, para que serve?
Serve para o polimorfismo e herança dos atributos e
métodos, que são recursos muito poderosos, como já vimos.
Qualquer classe que estender a classe Funcionario será
obrigada a reescrever este método, tornando-o "concreto"
21
Orientação a Objetos para Testadores
Abstract
Como posso acessar o método getBonificacao se ele
não existe na classe Pessoa? Já que o método é
abstrato, com certeza suas subclasses têm esse
método, o que garante que essa invocação de método
não vai falhar?
21
Orientação a Objetos para Testadores
Abstract
Basta pensar que uma referência do tipo Funcionario
nunca aponta para um objeto que não tem o método
getBonificacao, pois não é possível instanciar uma
classe abstrata, apenas as concretas. Um método
abstrato obriga a classe em que ele se encontra ser
abstrata.
21
Orientação a Objetos para Testadores
Abstract
Ou seja, tenho a classe abstrata Funcionario, com o
método abstrato getBonificacao; as classes Gerente e
Presidente estendendo Funcionario e implementando o
método getBonificacao; e, por fim, a classe Diretor,
que estende Gerente, mas não implementa o método
getBonificacao
21
Orientação a Objetos para Testadores
Abstract
Essas classes vão compilar? Vão rodar? A resposta é
sim. E, além de tudo, farão exatamente o que nós
queremos, pois, quando Gerente e Presidente possuem
os métodos perfeitamente implementados, a classe
Diretor, que não possui o método implementado, vai
usar a implementação herdada de Gerente
21
Orientação a Objetos para Testadores
Abstract
Se eu não reescrever um método abstrato da minha
classe mãe, o código não compilará. Mas posso, em vez
disso, declarar a classe como abstrata!
21
Orientação a Objetos para Testadores
Polimorfismo
Significa muitas formas (grego)
Permite escrever programas que processam objetos que
compartilham a mesma classe pai como se todos fossem
objetos da superclasse
Simplifica a programação
Ex: método sacar é diferente na conta corrente, na conta
poupança e na conta de investimento
Não é sobrecarga de método, mas sim mudar
Executar ações diferentes
21
Orientação a Objetos para Testadores
Polimorfismo
Não é sobrecarga de método, mas sim sobrescrita
(mudar
Executar ações diferentes)
SOBRECARGA
Mesmo nome do método, mas com diferentes
quantidades de parâmetros = sobrecarga de método
Acontece dentro da mesma classe
21
Orientação a Objetos para Testadores
Polimorfismo
SOBRESCRITA
Mesmo nome do método, mas em diferentes classes
que herdam de uma mesma classe abstrata
Tem que escrever o método totalmente, ou seja,
sobrescreve o método da classe pai
21
Orientação a Objetos para Testadores
Polimorfismo
Ex: Podemos ter Funcionários Vendedor e Testador
Classe Funcionário pode ser abstrata nesse contexto
Podemos ter métodos como CalcularSalario() que está
vazio, não implementa nada
Nas classes filhas, será diferente para cada um dos
funcionários
21
Orientação a Objetos para Testadores
Polimorfismo
Ações diferentes em métodos herdados das mesmas
classes pai
Que são implementados completamente diferentes
Vendedor tem o salário calculado com comissões e
outros e testador vocês sabem como é né...
21
Orientação a Objetos para Testadores
21
Orientação a Objetos para Testadores
21
Orientação a Objetos para Testadores
21
Orientação a Objetos para Testadores
Page Object
A página é um objeto!
21
Orientação a Objetos para Testadores

Contenu connexe

Tendances (17)

POO - 10 - Herança
POO - 10 - HerançaPOO - 10 - Herança
POO - 10 - Herança
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
POO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de DesenvolvimentoPOO - 05 - Ambiente de Desenvolvimento
POO - 05 - Ambiente de Desenvolvimento
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
SCJA
SCJASCJA
SCJA
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
UML
UMLUML
UML
 

Similaire à Orientação a objetos para testadores

Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Thiago Faria de Andrade
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Iure Guimaraes
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
Falácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste ÁgilFalácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste ÁgilMario Ramos
 
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdf
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdfAPOO.INT- S01 Paradigma de Orientação a Objetos (2).pdf
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdfpedrina4
 
Test driven development
Test driven developmentTest driven development
Test driven developmentclauvane1708
 
Test Driven Development - Conceitos básicos
Test Driven Development - Conceitos básicosTest Driven Development - Conceitos básicos
Test Driven Development - Conceitos básicosMateus Parente
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaPriscila Mayumi
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de ProjetoEduardo Mendes
 
1 - Introduação - Classes - Objetos.pdf
1 - Introduação - Classes - Objetos.pdf1 - Introduação - Classes - Objetos.pdf
1 - Introduação - Classes - Objetos.pdfJoberthSilva
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
Construtor em Java
Construtor em JavaConstrutor em Java
Construtor em JavaEderson Lima
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 

Similaire à Orientação a objetos para testadores (20)

Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...Test-Driven Development - Introdução ao método de construção de software guia...
Test-Driven Development - Introdução ao método de construção de software guia...
 
Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )Introdução a Desenvolvimento Orientado a Testes ( TDD )
Introdução a Desenvolvimento Orientado a Testes ( TDD )
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Falácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste ÁgilFalácias e outras ilusões sobre Teste Ágil
Falácias e outras ilusões sobre Teste Ágil
 
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdf
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdfAPOO.INT- S01 Paradigma de Orientação a Objetos (2).pdf
APOO.INT- S01 Paradigma de Orientação a Objetos (2).pdf
 
Agile Testing Coaching
Agile Testing Coaching  Agile Testing Coaching
Agile Testing Coaching
 
Atividade 3
Atividade 3Atividade 3
Atividade 3
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Test Driven Development - Conceitos básicos
Test Driven Development - Conceitos básicosTest Driven Development - Conceitos básicos
Test Driven Development - Conceitos básicos
 
Palestra agile testing coaching
Palestra agile testing coaching Palestra agile testing coaching
Palestra agile testing coaching
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade única
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de Projeto
 
AVALIAÇÃO ESTADUAL Comparada às Nacionais: SAEB e ENEM
AVALIAÇÃO ESTADUAL Comparada às Nacionais: SAEB e ENEMAVALIAÇÃO ESTADUAL Comparada às Nacionais: SAEB e ENEM
AVALIAÇÃO ESTADUAL Comparada às Nacionais: SAEB e ENEM
 
1 - Introduação - Classes - Objetos.pdf
1 - Introduação - Classes - Objetos.pdf1 - Introduação - Classes - Objetos.pdf
1 - Introduação - Classes - Objetos.pdf
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
Construtor em Java
Construtor em JavaConstrutor em Java
Construtor em Java
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 

Orientação a objetos para testadores

  • 1. Orientação a Objetos para Testadores @BrunoMurawski Orientação a Objetos para Testadores 1
  • 2. Muitas vezes aquele que mais precisa é o que menos se empenha Orientação a Objetos para Testadores 1
  • 3. Porque utilizar O.O.? Validar CEP em vários Formulários Qual a chance de esquecer de validar eles? 2 Orientação a Objetos para Testadores
  • 4. Vantagens Não espalhar a responsabilidade de validar em todo o seu código! Centralizar essa responsabilidade em um só lugar! Diminui as chances de erros! 3 Orientação a Objetos para Testadores
  • 5. Vantagens Organiza o código Diminui o Retrabalho (código duplicado e correções) Encapsula a lógica dos Negócios Responsabilidades centralizadas 4 Orientação a Objetos para Testadores
  • 6. Vantagens Diminui código escrito – c/ o Polimorfismo 5 Orientação a Objetos para Testadores
  • 7. O que é um Objeto? Características Comportamento Estado 5 Orientação a Objetos para Testadores
  • 8. Estado É como ele está em um determinado momento Ex: o objeto televisão está ligado ou desligado? 5 Orientação a Objetos para Testadores
  • 9. Características Características dizem o que o objeto é 5 Orientação a Objetos para Testadores
  • 10. Precisamos saber disso? Precisamos para que possamos fazer a abstração dos objetos que iremos trabalhar Abstração de Objetos Abstração de Dados 5 Orientação a Objetos para Testadores
  • 11. Pensando em Pessoas Objeto: pessoa Contexto: comprar um produto em um e-commerce O que toda pessoa tem? 6 Orientação a Objetos para Testadores
  • 12. O que toda pessoa tem? Características Físicas: - Cabeça - Olhos - Boca - Braços - Mãos - ... 7 Orientação a Objetos para Testadores
  • 13. O que toda pessoa tem? Características Sociais: - Nome - Data de Nascimento - Sexo - CPF - ... 8 Orientação a Objetos para Testadores
  • 14. Diagrama de Classe 14 Orientação a Objetos para Testadores
  • 15. Instâncias Criamos “instâncias” de pessoas Podem ter ações e comportamentos Declaramos o que cada pessoa tem no projeto(classe), mas as instâncias é que podem armazenar esses dados realmente! Projeto de Pessoa -> Classe Pessoas em si -> objetos 15 Orientação a Objetos para Testadores
  • 16. Instâncias! 16 Orientação a Objetos para Testadores Pessoa loide; Pessoa debi; loide = new Pessoa( ); debi = new Pessoa( );
  • 17. Sintaxe - Variáveis tipo_variável nome_variável; Exemplo: int numero; string nome; Atribuição de valores para uma variável: nome_variável = valor; Int numero = 30; 17 Orientação a Objetos para Testadores
  • 18. Mão na Massa Vamos construir uma pessoa! O que uma pessoa tem? C# 17 Orientação a Objetos para Testadores
  • 19. O que toda pessoa faz? Ações e Comportamentos: - Dorme - Bebe - Come - Trabalha - Estuda 9 Orientação a Objetos para Testadores
  • 20. O que toda pessoa faz? Ações e Comportamentos: - Dorme - Bebe - Come - Trabalha - Estuda - Cuida da vida alheia 9 Orientação a Objetos para Testadores
  • 21. Pessoa faça algo! Podemos perguntar a essa pessoa qual é a sua idade? Essa pessoa pode dançar, dormir ou fazer qualquer outra coisa? 10 Orientação a Objetos para Testadores
  • 22. Pessoa faça algo! NÃO! 10 Orientação a Objetos para Testadores
  • 23. Blueprint de Pessoa O que fizemos até agora foi projetar como uma pessoa seria: 11 Orientação a Objetos para Testadores
  • 24. Primeiro Primeiro precisamos “criar” uma pessoa... 12 Orientação a Objetos para Testadores
  • 25. Atividade Acessar o que ele “tem” e “pedir” para ela fazer algo... 13 Orientação a Objetos para Testadores
  • 26. Código Gerado ... Classe PESSOA 18 Orientação a Objetos para Testadores
  • 27. Código Gerado ... Objeto KREUSA 19 Orientação a Objetos para Testadores
  • 28. Operadores Tipos de operadores: Relacionais (==, !=, >, <, >=, <=) Lógicos (&&, ||, !) Atribuição (=, +=, *=, /=) Ternários. 21 Orientação a Objetos para Testadores
  • 29. Tipos de Dados Orientação a Objetos para Testadores Palavra Chave Tipo Faixa de valores bool System.Boolean true ou false double System.Double ±5,0 × 10-324 a ±1,7 × 10308 float System.Single ±1,5 × 10-45 a ±3,4 × 1038 int System.Int32 -2.147.483.648 a 2.147.483.647 long System.Int64 -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 String System.String “Meu nome é Bruno" 20
  • 30. Casting e ToString int x = 42; String numeroEmTexto = x.ToString(); Console.WriteLine(numeroEmTexto ); Output: 42 17 Orientação a Objetos para Testadores
  • 31. Atributos Declaram o que toda a Classe deve ter São declarados fora do bloco São diferentes de variáveis temporárias São variáveis Membros 21 Orientação a Objetos para Testadores
  • 32. Métodos Com ou sem Retorno São as ações – Comportamento 21 Orientação a Objetos para Testadores
  • 33. Métodos - Parâmetros Ou argumentos São informações passadas aos métodos Passam o que o método precisa saber para me dar uma resposta ou realizar determinada ação 21 Orientação a Objetos para Testadores
  • 34. Void Método SEM retorno 21 Orientação a Objetos para Testadores
  • 35. Modificador Private Protege o acesso aos atributos da classe Permite o acesso somente dentro da classe 21 Orientação a Objetos para Testadores
  • 36. Getters e Setters São métodos responsáveis por Acessar e Modificar os Atributos das classes 21 Orientação a Objetos para Testadores
  • 37. Construtores Vai inicializar as variáveis, cada um dos atributos da classe Se fosse não passar nada ele vai inicializar null Mas podemos criar um Construtor passando Parâmetros para criar o objeto Devemos fazer o atributo do nosso objeto receber o parâmetro recebido no Construtor 21 Orientação a Objetos para Testadores
  • 38. This This -> palavra reservada This.nome; O atributo nome desta Classe Quando passamos um parâmetro igual ao nome do atributo da classe utilizamos o this para indicar que estamos pegando o atributo desta Classe 21 Orientação a Objetos para Testadores
  • 39. This Pessoa(string nome) This.nome = nome; 21 Orientação a Objetos para Testadores
  • 40. Encapsular Esconder todos os membros de uma classe Esconder como funcionam seus comportamentos (métodos) Fundamental para facilitar a Manutenção Não precisaremos mudar uma regra de negócio em vários lugares, mas sim em apenas um único lugar, já que essa regra está encapsulada 21 Orientação a Objetos para Testadores
  • 41. Encapsular É sempre bom programar pensando na interface da sua classe, como seus usuários a estarão utilizando, e não somente em como ela vai funcionar. A implementação em si, o conteúdo dos métodos, não tem tanta importância para o usuário dessa classe, uma vez que ele só precisa saber o que cada método pretende fazer, e não como ele faz, pois isto pode mudar com o tempo. Essa frase vem do livro Design Patterns, de Eric Gamma et al. 21 Orientação a Objetos para Testadores
  • 42. Encapsular Quando você dirige um carro, o que te importa são os pedais e o volante (interface) e não o motor que você está usando (implementação). É claro que um motor diferente pode te dar melhores resultados, mas o que ele faz é o mesmo que um motor menos potente, a diferença está em como ele faz 21 Orientação a Objetos para Testadores
  • 43. Encapsular Para trocar um carro a álcool para um a gasolina você não precisa reaprender a dirigir! (trocar a implementação dos métodos não precisa mudar a interface, fazendo com que as outras classes continuem usando eles da mesma maneira). · 21 Orientação a Objetos para Testadores
  • 44. Herança Devemos deixar as Classes mais Genéricas Não devemos criar uma outra classe e copiar o código novamente 21 Orientação a Objetos para Testadores
  • 45. Herança Não devemos criar uma outra classe e copiar o código novamente Se precisarmos adicionar uma nova informação para todas as pessoas, não precisaremos passar por todas as classes de pessoas e adicionar esse atributo Uma classe herda tudo que a outra tem Super Classe ou Classe Pai SubClasse Classe ou Classe Filha 21 Orientação a Objetos para Testadores
  • 46. Herança #Dica: Devemos sempre fazer a pergunta: É 1? O (x) é um pássaro? X = pato X = ganso X = cisne 21 Orientação a Objetos para Testadores
  • 47. Herança Extensão da Classe Pai Classe Filha possui possuirá também os atributos de definidos na classe Pai Herda Todos os Atributos e Métodos da Classe Pai @Override - deixar explícito no seu código que determinador método é a reescrita de um método da sua classe mãe Uma classe pode ter várias filhas, mas pode ter apenas uma mãe, é a chamada herança simples 21 Orientação a Objetos para Testadores
  • 48. 21 Orientação a Objetos para Testadores
  • 49. Herança Cuidado: herda os atributos e métodos privados, porém não consegue acessá-los diretamente. Para acessar um membro privado na filha indiretamente, seria necessário que a mãe expusesse um outro método visível que invocasse esse atributo ou método privado 21 Orientação a Objetos para Testadores
  • 50. Associação Representa um relacionamento entre classes onde uma das classes está presente como atributo da outra FAZ PARTE? Roda FAZ PARTE do Carro N x N 1 x N 1 x 1 21 Orientação a Objetos para Testadores
  • 51. Composição Informa que uma classe FAZ PARTE de outra de forma EXCLUSIVA Os objetos são independentes Um aluno pode existir sem a necessidade de um professor e vice e versa Indiferente do relacionamento entre eles, ambos podem existir sem o outro N alunos para N professores 1 Empresa (CWI) para N funcionários 21 Orientação a Objetos para Testadores
  • 52. Composição Se excluir a classe responsável pelo relacionamento, então DEVE excluir a classe que ele possui relacionamento 21 Orientação a Objetos para Testadores
  • 53. Agregação Informa que uma classe FAZ PARTE de outra, mas NÃO de forma EXCLUSIVA Representa um todo dividido em várias partes Quando o relacionamento é do tipo Faz parte 1 p/ N Tester faz parte do Time de Desenvolvimento 21 Orientação a Objetos para Testadores
  • 54. Agregação Se excluir a classe responsável pelo relacionamento NÃO DEVE excluir a classe que ele possui relacionamento 21 Orientação a Objetos para Testadores
  • 55. Private Então porque usar private? Depois de um tempo programando orientado a objetos, você vai começar a sentir que nem sempre é uma boa ideia deixar que a classe filha acesse os atributos da classe mãe, pois isso quebra um pouco a ideia de que só aquela classe deveria manipular seus atributos. Essa é uma discussão um pouco mais avançada. O tipo ou membro pode ser acessado somente pelo código na mesma classe 21 Orientação a Objetos para Testadores
  • 56. Static É uma classe ou atributo que é comum a todos os objetos criados a partir dela/dele Ex: classe de iniciação de projeto Atributo resultadoSoma No decorrer do programa podemos ter em diversas partes do sistema uma chamada ao método Somar() Se ele mandar o resultado da soma para um atributo static o resultado será sempre o mesmo em todo sistema 21 Orientação a Objetos para Testadores
  • 57. Protected E se precisamos acessar os atributos que herdamos? Não gostaríamos de deixar os atributos de Pessoa, public, pois dessa maneira qualquer um poderia alterar os atributos dos objetos deste tipo. Existe um outro modificador de acesso, o PROTECTED, que fica entre o private e o public. Um atributo protected só pode ser acessado (visível) pela própria classe e por suas subclasses 21 Orientação a Objetos para Testadores
  • 58. Acoplamento O uso de herança aumenta o acoplamento entre as classes, isto é, o quanto uma classe depende de outra. A relação entre classe mãe e filha é muito forte e isso acaba fazendo com que o programador das classes filhas tenha que conhecer a implementação da classe pai e vice-versa - fica difícil fazer uma mudança pontual no sistema. 21 Orientação a Objetos para Testadores
  • 59. Classes Abstratas Classe que define as características e comportamentos de um conjunto de objetos Mas, nem todas as classes são feitas para serem instanciadas Existem classes que são criadas para conter/agrupar características comuns a diversas classes e então ser herdadas por elas 21 Orientação a Objetos para Testadores
  • 60. Classes Abstratas Palavra chave Abstract Só consigo instanciar as classes filhas delas 21 Orientação a Objetos para Testadores
  • 61. Métodos Abstratos Classes abstratas podem ser utilizadas para prover a definição de métodos que devem ser implementados em todas as suas classes filhas sem apresentar uma implementação para esses métodos Toda classe que possui pelo menos um método abstrato é uma classe abstrata, mas uma classe pode ser abstrata sem possuir nenhum método abstrato Ex: Classe Simular 21 Orientação a Objetos para Testadores
  • 62. Abstract Usamos a palavra chave abstract para impedir que a classe possa ser instanciada O problema é instanciar a classe - criar referência, você pode. Se ela não pode ser instanciada, para que serve? Serve para o polimorfismo e herança dos atributos e métodos, que são recursos muito poderosos, como já vimos. Qualquer classe que estender a classe Funcionario será obrigada a reescrever este método, tornando-o "concreto" 21 Orientação a Objetos para Testadores
  • 63. Abstract Como posso acessar o método getBonificacao se ele não existe na classe Pessoa? Já que o método é abstrato, com certeza suas subclasses têm esse método, o que garante que essa invocação de método não vai falhar? 21 Orientação a Objetos para Testadores
  • 64. Abstract Basta pensar que uma referência do tipo Funcionario nunca aponta para um objeto que não tem o método getBonificacao, pois não é possível instanciar uma classe abstrata, apenas as concretas. Um método abstrato obriga a classe em que ele se encontra ser abstrata. 21 Orientação a Objetos para Testadores
  • 65. Abstract Ou seja, tenho a classe abstrata Funcionario, com o método abstrato getBonificacao; as classes Gerente e Presidente estendendo Funcionario e implementando o método getBonificacao; e, por fim, a classe Diretor, que estende Gerente, mas não implementa o método getBonificacao 21 Orientação a Objetos para Testadores
  • 66. Abstract Essas classes vão compilar? Vão rodar? A resposta é sim. E, além de tudo, farão exatamente o que nós queremos, pois, quando Gerente e Presidente possuem os métodos perfeitamente implementados, a classe Diretor, que não possui o método implementado, vai usar a implementação herdada de Gerente 21 Orientação a Objetos para Testadores
  • 67. Abstract Se eu não reescrever um método abstrato da minha classe mãe, o código não compilará. Mas posso, em vez disso, declarar a classe como abstrata! 21 Orientação a Objetos para Testadores
  • 68. Polimorfismo Significa muitas formas (grego) Permite escrever programas que processam objetos que compartilham a mesma classe pai como se todos fossem objetos da superclasse Simplifica a programação Ex: método sacar é diferente na conta corrente, na conta poupança e na conta de investimento Não é sobrecarga de método, mas sim mudar Executar ações diferentes 21 Orientação a Objetos para Testadores
  • 69. Polimorfismo Não é sobrecarga de método, mas sim sobrescrita (mudar Executar ações diferentes) SOBRECARGA Mesmo nome do método, mas com diferentes quantidades de parâmetros = sobrecarga de método Acontece dentro da mesma classe 21 Orientação a Objetos para Testadores
  • 70. Polimorfismo SOBRESCRITA Mesmo nome do método, mas em diferentes classes que herdam de uma mesma classe abstrata Tem que escrever o método totalmente, ou seja, sobrescreve o método da classe pai 21 Orientação a Objetos para Testadores
  • 71. Polimorfismo Ex: Podemos ter Funcionários Vendedor e Testador Classe Funcionário pode ser abstrata nesse contexto Podemos ter métodos como CalcularSalario() que está vazio, não implementa nada Nas classes filhas, será diferente para cada um dos funcionários 21 Orientação a Objetos para Testadores
  • 72. Polimorfismo Ações diferentes em métodos herdados das mesmas classes pai Que são implementados completamente diferentes Vendedor tem o salário calculado com comissões e outros e testador vocês sabem como é né... 21 Orientação a Objetos para Testadores
  • 73. 21 Orientação a Objetos para Testadores
  • 74. 21 Orientação a Objetos para Testadores
  • 75. 21 Orientação a Objetos para Testadores
  • 76. Page Object A página é um objeto! 21 Orientação a Objetos para Testadores