Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientada a Objetos
Cinthya Cavalcanti Flório
Leonardo Guimarães de Holanda
Educação a Distância
Recife
Março | 2020
Professor(es) Autor(es) Catalogação e Normalização
Cinthya Cavalcanti Flório Hugo Cavalcanti (Crb-4 2129)
Leonardo Guimarães de Holanda
Diagramação
Revisão Jailson Miranda
Cinthya Cavalcanti Flório
Leonardo Guimarães de Holanda Coordenação Executiva
Américo Barros George Bento Catunda
Renata Marques de Otero
Coordenação de Curso Manoel Vanderley dos Santos Neto
Américo Barros
Coordenação Geral
Coordenação Design Educacional Maria de Araújo Medeiros Souza
Deisiane Gomes Bazante Maria de Lourdes Cordeiro Marques
F638p
Flório, Cinthya Cavalcanti.
Programação Web Orientada a Objetos: Curso Técnico em Desenvolvimento de Sistemas:
Educação a distância / Cinthya Cavalcanti Flório, Leonardo Guimarães de Holanda. – Recife:
Escola Técnica Estadual Professor Antônio Carlos Gomes da Costa, 2020.
96 p.: il.
2.1 Classe........................................................................................................................................................ 19
2.4 Método..................................................................................................................................................... 23
3.2 Encapsulamento....................................................................................................................................... 49
Conclusão ............................................................................................................................................. 93
Referências ........................................................................................................................................... 94
6
Competência 01
7
Competência 01
8
Competência 01
da condição seja verdadeiro e uma abstração do código através dos textos comando 1 comando 2. Além disso, o
pseudocódigo também possui uma condição alternativa caso o resultado da condição seja falso através das palavras
reservadas SENÃO INICIO e FIM para delimitar o conteúdo dentro da estrutura e uma abstração do código através dos
textos comando 3 comando 4.
O paradigma orientado a objetos foi idealizado para desenvolver softwares de forma mais
simples e abstrata em relação ao paradigma estruturado, tentando aproximar os códigos feitos nas
linguagens de programação às entidades existentes no mundo real. Devido a isso, na orientação a
objetos ocorre a modelagem dos sistemas abstraindo cada componente como um objeto, com suas
características e funcionalidades.
Pensar em termos de objetos é muito semelhante a como pensamos e agimos na vida
real, por exemplo, vamos imaginar um restaurante como modelo de um sistema a ser representado
9
Competência 01
com o uso de programação orientada a objetos. Diríamos que um Prato é o elemento principal e tem
diversas características como o nome, a quantidade de pessoas servidas, se possui acompanhamento
ou não, o preço, etc. Além disso tem várias funcionalidades associadas, como exibir o prato, forma
de pagamento, entre outros. Então no contexto do paradigma da programação orientada a objetos o
Prato seria a classe, as características seriam os atributos e as funcionalidades associadas seriam os
métodos. Os objetos seriam os pratos específicos, como por exemplo cozido (serve 2 pessoas, possui
acompanhamentos, custa R$ 44, 27), carne de sol (serve 3 pessoas, possui acompanhamentos, custa
R$ 24, 99) e feijoada (serve 4 pessoas, não possui acompanhamentos, custa R$ 69, 99). A Figura 6
apresenta um exemplo dos conceitos da orientação a objetos de acordo com a classe Prato.
Figura 6 - Exemplo dos conceitos da orientação a objetos de acordo com a classe Prato
Fonte: A autora
Descrição: Representação dos conceitos da orientação a objetos por meio de imagens e exemplos do mundo real. No
lado esquerdo está um retângulo azul com retângulos brancos menores dentro dele. No primeiro retângulo branco
possui o texto Classe(Prato) dentro dele, o segundo retângulo branco possui o texto Características(Atributos) dentro
dele e o terceiro e último retângulo branco possui o texto Funcionalidades(Métodos) dentro dele. Do lado direito estão
três imagens, são elas: um cozido, uma carne de sol e uma feijoada. Cada uma dessas três imagens estão ligadas ao
retângulo azul por meio de segmentos de reta contínuos também azuis, ao todo são três segmentos de reta, um para
cada imagem. Essas três imagens estão sendo englobadas por uma chave na cor laranja e que possui o texto Objeto no
centro canto direito.
10
Competência 01
11
Competência 01
12
Competência 01
13
Competência 01
14
Competência 01
15
Competência 01
16
Competência 01
17
Competência 01
18
Competência 02
2.1 Classe
Uma classe é formada por um agrupamento de variáveis (atributos) e funções (métodos),
que definem o estado e o comportamento comum de uma categoria de objetos do mesmo tipo. As
classes podem ser definidas como abstrações de objetos, pois estas são o molde ou a fôrma que
estrutura os objetos de acordo com os atributos e métodos especificados.
Fazendo uma comparação com a programação estrutura você poderia imaginar uma
classe como uma estrutura de dados, pois essas possuem informações de tipos abstratos. Contudo,
as classes possuem muito mais capacidade que uma estrutura de dados, por elas conterem os
métodos e também possuirem a flexibilidade de encapsular informações.
Para ficar mais claro o conceito de classe vamos pensar em um exemplo da vida real.
Imagine que você foi contratado pelo dono do restaurante Fome Zero para desenvolver um software.
Bacana não é? Então, o primeiro passo é pensar em como modelar os pedidos dos clientes. O cliente
deverá fazer um pedido através da solicitação de um prato (galinha à cabidela, cozido, carne de sol,
etc) ao restaurante. Sendo assim, é recomendado a criação da classe Prato.
DICA IMPORTANTE!
Uma classe representa uma entidade abstrata ou concreta, por isso na maioria
das vezes o nome da classe é um substantivo.
19
Competência 02
DICA IMPORTANTE!
Os nomes das Classes sempre iniciam com letra maiúscula. Caso o nome da classe
seja formado por mais de uma palavra, a primeira letra de cada palavra deverá iniciar
com letra maiúscula. Essa prática ou padrão é conhecido como CamelCase.
2.2 Objeto
Ao criamos uma classe o objetivo final é a geração de objetos que são representações
dessa classe. O objeto é a concretização de uma classe. É através dos objetos que é possível inicializar
os atributos e invocar os métodos. A partir da classe podem ser criados diversos objetos com
características e comportamentos diferentes dependendo dos valores fornecidos aos seus atributos
e dos valores dos parâmetros em seus métodos.
Vamos voltar ao exemplo do software para um restaurante. Pense que no software seja
preciso exibir todos os pratos que o restaurante fornece. Assim, será necessário instanciar os objetos
da classe Prato de acordo com os pratos reais fornecidos pelo restaurante.
Para instanciar um objeto, utilizamos a seguinte estrutura: primeiramente declaramos
uma variável sempre iniciando com o símbolo do cifrão $ e com um nome que identifique o objeto,
em seguida inserimos o sinal de igual = logo após acrescentamos a palavra-chave new, depois
adicionamos o nome da classe e, por fim colocamos ponto e vírgula. A Figura 15 apresenta a estrutura
do objeto $prato.
20
Competência 02
2.3 Atributo
Os atributos ou propriedades são as características dos objetos. Os valores dessas
características definem o estado de um objeto, sendo assim é provável que, ao longo da utilização do
objeto, esses valores sofram alterações. Além disso, apesar de ser possível que objetos diferentes
possuam as mesmas características, os valores dos atributos são específicos de cada objeto e estes
só vão existir enquanto o objeto existir, ou seja, se o objeto for destruído os valores dos atributos
associados a ele também serão perdidos.
Mais uma vez vamos voltar ao exemplo do software para um restaurante. Se você está
pensando que iremos utilizar esse exemplo durante toda a disciplina você acertou! Agora, suponha o
prato possui uma série de características, como, nome, quantidade de pessoas servidas, se possui
acompanhamento, preço, entre outros. Todas essas características são os atributos dos objetos da
classe Prato. O valor destes atributos poderiam ser nome = galinha à cabidela ou quantidade de
pessoas servidas = 2, por exemplo.
Para declarar um atributo, utilizamos a seguinte estrutura: primeiramente declaramos um
modificador de acesso, em seguida uma variável sempre iniciando com o símbolo do cifrão $ e com
um nome que identifique o atributo e, por fim colocamos ponto e vírgula. Você pode estar se
perguntando “O que é um modificador de acesso?” Não se preocupe com isso por enquanto, esse
conceito será visto mais adiante. Com exceção do modificador de acesso todos os outros elementos
citados anteriormente são obrigatórios na declaração de um atributo. A Figura 16 apresenta a
estrutura do atributo $nome da classe Prato e a Figura 17 mostra um exemplo de inserção do valor
“Galinha à cabidela” ao atributo $nome do objeto $prato.
21
Competência 02
DICA IMPORTANTE!
Os nomes dos atributos e métodos sempre iniciam com letra minúscula. Caso o
nome do atributo ou método seja formado por mais de uma palavra, a primeira
letra de cada palavra deverá iniciar com letra maiúscula. Essa prática ou padrão é
conhecido como CamelCase.
22
Competência 02
2.4 Método
Os métodos são funcionalidades de uma classe. São as ações ou comportamentos que os
objetos poderão assumir. É através dos métodos que os objetos interagem e se comunicam. Para
cada método é necessário especificar uma assinatura que corresponda a uma descrição da atividade
que o método deverá executar. Os métodos podem receber nenhum parâmetro ou uma lista de
parâmetros, ou seja, uma ou diversas variáveis que podem ser passadas para serem utilizadas dentro
do corpo dos métodos. Além disso, também é possível retornar um resultado após a execução do
método, para isso é necessário a utilização da palavra-chave return no final do método seguida da
variável ou objeto que se deseja retornar.
No exemplo do software para um restaurante imagine que é preciso exibir as informações
relacionadas aos pratos. Para isso é necessário criar um método chamado exibirPrato. O objetivo
desse método é imprimir no navegador as informações relacionadas aos objetos do tipo Prato, como,
nome do prato, quantidade de pessoas servidas, se possui acompanhamento, preço. Verifique que
não foi necessário o método receber nenhum parâmetro nem retornar um resultado após a
execução.
A assinatura de um método, é composta pela seguinte estrutura: primeiramente
declaramos um modificador de acesso, em seguida acrescentamos a palavra-chave function, logo
após adicionamos um nome que identifique o método, posteriormente inserimos a lista de
parâmetros dentro dos parênteses e, por fim abre e fecha chaves {}. Dentro das chaves será inserido
o corpo ou escopo do método. Com exceção do modificador de acesso e da lista de parâmetros todos
os outros elementos citados anteriormente são obrigatórios na assinatura de um método. A Figura
18 apresenta a estrutura do método exibePrato da classe Prato. Os três pontos enfileirados um em
cima do outro no código, ,significam que parte do código está sendo omitida para que o foco seja
atribuído ao tópico do ensino está sendo destacado. Não se preocupe que mais adiante você irá
visualizar a classe Prato completa com todos os conceitos aprendidos até o momento. A Figura 19
mostra um exemplo de utilização dos métodos setNome, setQuantidadePessoasServidas,
setPossuiAcompanhamento, setPreco e exibePrato do objeto $prato.
23
Competência 02
Figura 19 - Exemplo de utilização dos métodos gets, sets e exibePrato pelo objeto prato
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta a
inclusão do arquivo prato.php, a criação de um objeto chamado $prato da classe Prato com o parâmetro Prato Especial
no construtor. Além da atribuição do valor Galinha à cabidela para o método setNome, valor dois para o método
setQuantidadePessoasServidas, valor um para o método setPossuiAcompanhamento, valor cinquenta e dois reais e
trinta e seis centavos para o método setPreco do objeto $prato. E para finalizar também é chamado o método
exibePrato. Todo o conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo
PHP.
24
Competência 02
DICA IMPORTANTE!
Os três pontos enfileirados um em cima do outro no código significam que
parte do código está sendo omitida para que o foco seja atribuído ao tópico que
está destacado.
DICA IMPORTANTE!
É fortemente recomendado sempre usar verbos no nome dos métodos. Facilita o
entendimento e a manutenção do código.
25
Competência 02
26
Competência 02
DICA IMPORTANTE!
É fortemente recomendado sempre utilizar os métodos get e set para acessar os
atributos de um objeto.
DICA IMPORTANTE!
Não existe a necessidade de criação de um objeto para acessar atributos e métodos
estáticos.
27
Competência 02
Para ter acesso a um atributo estático é preciso utilizamos a seguinte estrutura: nome da
classe, seguido de dois pontos dois pontos :: e nome do atributo estático, por exemplo,
Prato::$quantidadePratosServidos. A Figura 23 apresenta um exemplo de utilização do atributo
estático da classe Prato.
28
Competência 02
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta
uma classe chamada Prato, com o método exibePrato sem parâmetros. A classe Prato possui todo seu corpo delimitado
pela abertura e fechamento de chaves. O método exibePrato também possui todo seu corpo delimitado pela abertura e
fechamento de chaves. O corpo do método exibePrato possui diversos comandos echo para impressão dos valores dos
atributos nome, quantidadePessoasServidas, possuiAcompanhamento e preço no navegador. Além disso, o método
exibePrato também possui o atributo estático $quantidadePratosServidor que é chamado por meio do operador parent
para imprimir seu valor no navegador. Todo o conteúdo do código está inserido entre as tags de abertura <?php e de
fechamento ?> de arquivo PHP. O atributo estático $quantidadePratosServidor está destacado através de um retângulo
em vermelho com uma seta apontando para a expressão atributo estático também em vermelho.
Para que o dono do restaurante possa saber quantos pratos são servidos é preciso que
toda vez que um objeto da classe Prato for criado seja acrescentado o valor 1 ao conteúdo do atributo
estático $quantidadePratosServidos. A Figura 24 apresenta um exemplo de utilização do atributo
estático da classe Prato após a inicialização dos objetos e a Figura 25 mostra um exemplo do conteúdo
que será impresso no navegador após a execução do método exibePrato com o uso do atributo
estático $quantidadePratosServidos.
29
Competência 02
abaixo, é atribuído o valor dois ao atributo estático $quantidadePratosServidor que é chamado por meio do operador
parent. Adicionamente a isto também temos, a criação de um objeto chamado $prato da classe Prato com o parâmetro
Prato Caseiro no construtor, além da atribuição do valor Cozido para o atributo nome, valor dois para o atributo
quantidadePessoasServidas, valor um para o atributo possuiAcompanhamento, valor quarenta e quatro reais e vinte e
sete centavos para o atributo preco do objeto $prato. E para finalizar também é chamado o método exibePrato. Todo o
conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo PHP.
DICA IMPORTANTE!
Em PHP para termos acesso a uma propriedade estática dentro do corpo da classe
temos que usar a palavra-chave self acompanhada de dois pontos dois pontos ::
2.6 Construtor
O construtor é um método especial pelo fato de executar alguma ação toda vez que um
objeto é criado. Você pode está se perguntando “Que tipo de ação eu iria querer executar ao
inicializar um objeto? ”. A ação a ser executada no construtor vai depender do que você precisa que
30
Competência 02
seu objeto faça imediatamente após ser criado, por exemplo, poderia ser a impressão de uma simples
mensagem ou a inicialização dos atributos com valores específicos.
Construtores podem não receber nenhum parâmetro ou uma lista de parâmetros, ou
seja, nenhuma, uma, ou diversas variáveis podem ser passadas para serem utilizadas dentro do corpo
do construtor. Diferentemente dos métodos, não é possível retornar um resultado após a execução
dos construtores.
A declaração de um construtor, na linguagem PHP, é composta pela seguinte estrutura:
primeiramente declaramos a palavra-chave function, em seguida acrescentamos o nome reservado
__construct(), logo após adicionamos a lista de parâmetros dentro dos parênteses e, por fim abre e
fecha chaves {}. Dentro das chaves será inserido o corpo ou escopo do construtor. Com exceção da
lista de parâmetros todos os outros elementos citados anteriormente são obrigatórios na declaração
de um construtor. A Figura 26 apresenta a estrutura do construtor da classe Prato.
Outra diferença entre métodos e construtores é a forma de chamá-los, nos métodos basta
digitar o nome do método, seguido da lista de parâmetros caso possua. Nos construtores é preciso o
31
Competência 02
uso da palavra-chave new seguida pelo nome da classe e a lista de parâmetros caso possua. A Figura
27 apresenta um exemplo de um objeto da classe Prato com um construtor recebendo um parâmetro
chamado “Prato Especial”. E a Figura 28 mostra um exemplo de saída de um objeto da classe Prato
com construtor e o parâmetro passado anteriormente.
São muitos conceitos novos e muito conteúdo para ser absorvido!!!! Por isso a Figura 29
mostra a classe Prato completa (lembra que você viu isso no item 2.4 Método?), com todos os
conceitos aprendidos até o momento. Verifique todos os elementos destacados, a forma como os
componentes da classe estão dispostos, o nome dos atributos e métodos, compare o atributo estático
com os que não são estáticos, etc. Faça uma análise geral da classe Prato, isso vai lhe ajudar no
entendimento dos próximos assuntos que serão abordados.
32
Competência 02
33
Competência 02
Figura 29 - Exemplo da classe Prato com todos os conceitos visto até o momento
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta
uma classe chamada Prato, com quatro atributos públicos, são eles: $nome, $quantidadePessoasServidas,
$possuiAcompanhamento, $preco. Além disso, a classe Prato também possui um atributo estático
$quantidadePratosServidos inicializado com zero, um construtor com um parâmetro, um método chamado exibePrato e
métodos get e set para cada atributo. A classe Prato possui todo seu corpo delimitado pela abertura e fechamento de
chaves, assim como o corpo do construtor, do método exibePrato e dos métodos get e set. O corpo do construtor
possui um comando echo para impressão no navegador da mensagem Aproveitem nossos deliciosos e concatena com o
valor do parâmetro. Os métodos get não possuem parâmetros e set possuem o parâmetro $valor. Os métodos get
retornam o valor do atributo e o método set insere o valor do parâmetro no atributo. O corpo do método exibePrato
possui diversos comandos echo para impressão dos valores dos atributos nome, quantidadePessoasServidas,
possuiAcompanhamento e preço no navegador. Além disso, o método exibePrato também possui o atributo estático
$quantidadePratosServidor que é chamado por meio do operador parent para imprimir seu valor no navegador. Todo o
conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo PHP. A classe, os
atributos, o construtor, o atributo estático, os métodos get e set e o método exibePrato estão destacados através de
retângulos em vermelho com cada seta apontando para as palavras também em vermelho, classe, atributo, construtor,
atributo estático, métodos get e set e método, respectivamente.
2.7 Herança
A herança é uma das características mais fortes da programação orientada a objetos e
uma das mais utilizadas. Esse conceito está diretamente ligado à reutilização de código, pois consiste
em podermos criar uma classe completamente nova a partir de outra classe já existente. A classe
nova pode manter todas as características da classe já existente ou pode sobrescrevê-las (não se
preocupe, sobreescrita é um conceito que será visto mais adiante), além de poder criar suas próprias
características adicionando novas funcionalidades. A classe nova recebe o nome de subclasse ou
classe filha e a classe já existente é chamada de superclasse ou classe pai.
À princípio, logo após serem criadas, as subclasses herdam (absorvem) todos os atributos
e métodos da superclasse. À medida que vão surgindo novas necessidades novos atributos e métodos
vão sendo acrescentados nas subclasses.
É possível que exista a necessidade de uma classe herdar outra classe que já herda de
alguma outra classe, formando uma hierarquia de classes. Imagine a seguinte situação: a classe C
herdar da classe B e a classe B herdar da classe A. Confuso não é? Calma que eu explico. Algumas
vezes esbarramos em determinadas situações em que é necessário uma classe herdar o estado e o
comportamento de classes anteriores. Nesse momento pense na hierarquia da sua família, seu pai
possui algumas características semelhantes ao seu avô e você possui algumas características
semelhantes do seu pai e do seu avô, correto? Pois então, o mesmo raciocínio é válido para a herança,
a classe C (filho) herdou da classe B (pai) e a classe B(pai) herdar da classe A (avô).
34
Competência 02
35
Competência 02
preciso incluir na subclasse o arquivo onde está a superclasse, isso é feito através do nome reservado
include_once. A Figura 31 apresenta um exemplo de herança na qual a classe Prato Principal está
herdando da classe Prato.
36
Competência 02
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador O código apresenta a
inclusão do arquivo prato.php, uma classe chamada PratoPrincipal, com dois atributos públicos, são eles:
$incluiRefrigerante e $servidoNaEntrada. Além disso, a classe Prato também possui um método chamado
exibePratoPrincipal e métodos get e set para cada atributo. A classe PratoPrincipal possui todo seu corpo delimitado
pela abertura e fechamento de chaves, assim como o corpo do método exibePratoPrincipal e dos métodos get e set. Os
métodos get não possuem parâmetros e set possuem o parâmetro $valor. Os métodos get retornam o valor do atributo
e o método set insere o valor do parâmetro no atributo. O corpo do método exibePratoPrincipal possui diversos
comandos echo para impressão dos valores dos atributos nome, quantidadePessoasServidas, possuiAcompanhamento,
incluiRefrigerante, servidoNaEntrada e preço no navegador. Todo o conteúdo do código está inserido entre as tags de
abertura <?php e de fechamento ?> de arquivo PHP. O relacionamento de herança está destacado através de um
retângulo em vermelho com uma seta apontando para a palavra herança também em vermelho.
37
Competência 02
A Figura 34 apresenta outro exemplo de herança na qual a classe Prato Promocional está
herdando da classe Prato Principal.
Indicamos que você assista esse vídeo como forma de ampliar seu
conhecimento sobre classes, objetos, herança e visibilidade
https://www.youtube.com/watch?v=mysYZdwLrPo
38
Competência 02
39
Competência 02
40
Competência 03
3.1 Abstração
Uma das principais características do paradigma orientado a objetos é a abstração que,
em relação a computação, significa pensar em um nível mais elevado sem se preocupar com os
detalhes de implementação.
Essa característica é muito importante principalmente quando pensamos em como vamos
fazer a representação de objetos do mundo real no mundo virtual, ou seja, de que forma iremos
representar no nosso programa de computador os objetos do mundo real, com suas características e
comportamentos utilizando os conceitos da orientação a objetos como, classe, atributo, objeto, entre
outros.
Assim, continuaremos no aprendizado da programação web orientada a objetos pois,
quanto mais ampliarmos os conhecimentos mais fácil será fazermos abstração.
41
Competência 03
42
Competência 03
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta a
inclusão do arquivo sobremesa.php, a criação de um objeto chamado $sobremesa da classe Sobremesa, com atribuição
do valor Taça de Sorvete para o atributo nome, valor um para o atributo quantidadePessoasServidas, valor cinco reais e
cinquenta e três centavos para o atributo preco, valor gelada para o atributo temperaturaServida do objeto $
sobremesa. E também é chamado o método exibeSobremesa. Todo o conteúdo do código está inserido entre as tags de
abertura <?php e de fechamento ?> de arquivo PHP.
Você observou que os atributos nome, quantidade de pessoas servidas e preço são os
mesmos atributos já existentes na classe Prato? Então, não seria melhor utilizar o reuso de código e
colocar a classe Sobremesa herdando da classe Prato? A resposta é não, pois além dos atributos
citados anteriormente a classe Prato possui um atributo a mais que é se possui acompanhamento. E
não faz sentido a classe Sobremesa possuir o atributo $possuiAcompanhamento. Como resolver essa
questão? Uma possível solução é através do uso de classes abstratas.
As classes abstratas são classes especiais, a principal diferença entre uma classe abstrata
e uma classe comum está no fato das abstratas não poderem ser instanciadas, sendo necessário a
criação de uma subclasse para herdá-la. Uma classe é caracterizada como abstrata por precisar ser
herdada por outra classe. As classes abstratas podem possuir diversos métodos, alguns podem ser
concretos, isto é, conter corpo (conteúdo) outros podem ser abstratos, ou seja, não possuem um
corpo, só assinatura. Nos casos dos métodos abstratos a responsabilidade de implementá-los é da
subclasse que herdar da classe abstrata.
Para solucionar a questão da classe Sobremesa poderíamos criar a classe abstrata Pedido
e as classes Prato e Sobremesa herdariam dela. A ideia é inserir todas as características semelhantes
das classes Prato e Sobremesa na classe abstrata Pedido, pois esta última não precisa ser instanciada.
No mundo real não faz sentido o cliente solicitar apenas um pedido, é preciso que o pedido seja um
prato ou uma sobremesa. A Figura 40 apresenta a hierarquia das classes Pedido, Prato e Sobremesa.
43
Competência 03
44
Competência 03
A Figura 42 apresenta a classe Prato herdando da classe Pedido, apenas com o atributo
$possuiAcompanhamento e implementando o método exibePedido.
45
Competência 03
46
Competência 03
A Figura 44 apresenta um exemplo dos objetos $prato e $sobremesa das classes Prato e
Sobremesa, respectivamente e a Figura 45 ilustra a saída gerada pelos objetos $prato e $sobremesa
com a herança da classe abstrata Pedido.
47
Competência 03
48
Competência 03
DICA IMPORTANTE!
Uma classe abstrata existe para ser estendida (herdada).
3.2 Encapsulamento
Encapsular significa esconder, ocultar, proteger em uma cápsula. No contexto da
programação orientada a objeto o encapsulamento é o mecanismo utilizado para oculta os detalhes
internos de implementação e isolar as informações das interferências externas e do uso indevido.
É possível aplicar este conceito através dos modificadores de acesso: public, protected e
private. Os modificadores de acesso são recursos que possibilitam restringir ou liberar o acesso aos
atributos e aos métodos das classes. Neste contexto a classe funciona como uma casca ou cápsula.
Geralmente, não é interessante que objetos de outras classes tenham a liberdade de alterar o valor
de um determinado atributo de um objeto. Em muitas situações, é necessário que apenas atributos
e métodos específicos sejam visíveis fora da classe.
É importante destacar que este recurso não é restrito apenas aos atributos e métodos,
também pode ser aplicado a outros componentes como classes e construtores. Além disso, todo
modificador de acesso precisa ser declarado antes do componente que será protegido. A Figura 46
apresenta os modificadores de acesso com suas respectivas descrições e a Figura 47 mostra um
resumo da visibilidade dos modificadores de acesso dentro da classe, nas subclasses e em qualquer
trecho do código.
49
Competência 03
50
Competência 03
Indicamos que você assista esse vídeo como forma de ampliar seu
conhecimento sobre modificadores de acesso em PHP
https://www.youtube.com/watch?v=CuyXVxsElXs
51
Competência 03
52
Competência 03
53
Competência 03
54
Competência 03
Figura 55 - Mensagem de erro exibida quando a classe TesteHerancaClasseFinal herda da classe final Cortesia
Fonte: A autora
Descrição: Mensagem de erro do código-fonte escrito na linguagem PHP para construção de programa de computador
ao extender a classe final testeHerancaClasseFinal.
55
Competência 03
DICA IMPORTANTE!
Não é possível declarar uma classe abstrata como final, pois a classe final não
pode ser herdada e a abstrata precisa ser herdada.
3.4 Associação
56
Competência 03
Indicamos que você assista esse vídeo como forma de ampliar seu
conhecimento sobre associação e relacionamento entre classes
https://www.youtube.com/watch?v=X6DTtj8Pfc0
3.5 Interface
Imagine que agora o dono do restaurante solicitou a você que implementasse no software
uma funcionalidade para pagamento do Pedido. Todo pedido precisa ter um pagamento, porém a
forma de realizar o pagamento deve variar de acordo com o tipo do pedido, por exemplo, um pedido
do tipo Prato possui uma forma de pagamento diferente do pedido do tipo Sobremesa. Assim, para
solucionar essa questão é indicado a utilização de uma interface.
Interfaces são definidas de forma semelhante às classes, contudo, as interfaces contém
apenas as assinaturas dos métodos, ou seja, todos os métodos de uma interface são abstratos,
consequentemente não possuem corpo (conteúdo). Nas interfaces os corpos dos métodos precisam
obrigatoriamente permanecer vazios, pois o objetivo é abstrair a implementação do código. As
classes que implementarem a interface é que devem ser responsabilizar pelo corpo dos métodos.
Interfaces são tipos de contratos, pois especificam quais métodos uma classe deve
implementar, sem ter que definir como esses métodos serão implementados. A classe que
implementar uma interface não pode optar por implementar um método e outro não,
obrigatoriamente todos os métodos declarados na interface precisam ser implementados.
57
Competência 03
DICA IMPORTANTE!
Uma interface tem que ser puramente abstrata.
58
Competência 03
59
Competência 03
retângulo em vermelho com uma seta também em vermelho apontando para a palavra interface e a expressão
implementação do método da interface respectivamente.
60
Competência 03
61
Competência 03
DICA IMPORTANTE!
Uma classe abstrata sem atributos e com todos os métodos abstratos poderia
facilmente ser transformada/substituída por uma interface.
Observem que estamos sempre trabalhando sobre o mesmo exemplo para facilitar o
entendimento e a absorção do conhecimento. Por isso, a Figura 62 mostra um resumo da hierarquia
das classes e interface criadas até o momento para o exemplo do restaurante Fome Zero.
62
Competência 03
Indicamos que você assista esse vídeo como forma de ampliar seu
conhecimento sobre interface, classe abstrata, atributo e método estático
https://www.youtube.com/watch?v=CXV49usnojU
63
Competência 03
64
Competência 03
3.7 Polimorfismo
Imagine que agora o dono do restaurante solicitou a você que implementasse a
funcionalidade para pagamento do Pedido de forma diferente em Prato Promocional, pois o Prato
Promocional só deverá aceitar dinheiro. Outra exigência é que Prato Principal deve possui a mesma
forma de pagamento da classe pai (Prato). Assim, para solucionar essa questão é indicado a utilização
de polimorfismo. A Figura 64 apresenta um resumo das formas de pagamento das classes Prato, Prato
Principal e Prato Promocional.
65
Competência 03
parâmetros e a mesma ordem dos parâmetros, porém implementações diferentes. Um dos principais
objetivos do polimorfismo é poder referenciar um objeto de várias formas diferentes.
66
Competência 03
67
Competência 03
inclusão do arquivo prato.php, uma classe chamada PratoPrincipal, com dois atributos públicos, são eles:
$incluiRefrigerante e $servidoNaEntrada. Além disso, a classe Prato também possui um método chamado
exibePratoPrincipal sem parâmetros e métodos get e set para cada atributo. A classe PratoPrincipal possui todo seu
corpo delimitado pela abertura e fechamento de chaves, assim como o corpo do método exibePratoPrincipal e dos
métodos get e set. Os métodos get não possuem parâmetros e set possuem o parâmetro $valor. Os métodos get
retornam o valor do atributo e o método set insere o valor do parâmetro no atributo. O corpo do método
exibePratoPrincipal possui diversos comandos echo para impressão dos valores dos atributos nome,
quantidadePessoasServidas, possuiAcompanhamento, incluiRefrigerante, servidoNaEntrada, preço e o retorno do
método formaPagamento no navegador. O método formaPagamento é chamado através do operador parent. Todo o
conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo PHP. A chamada do
método formaPagamento está destacado através de um retângulo em vermelho com uma seta também em vermelho
apontando para a expressão utiliza o método da classe pai.
68
Competência 03
69
Competência 03
$valorDesconto. Além disso, a classe PratoPromocional também possui um método chamado exibePratoPromocional
sem parâmetros, o método formaPagamento também sem parâmetros e os métodos get e set para cada atributo. A
classe PratoPromocional possui todo seu corpo delimitado pela abertura e fechamento de chaves, assim como o corpo
do método exibePratoPromocional e dos métodos get e set. Os métodos get não possuem parâmetros e set possuem o
parâmetro $valor. Os métodos get retornam o valor do atributo e o método set insere o valor do parâmetro no
atributo. O corpo do método exibePratoPromocional possui diversos comandos echo para impressão dos valores dos
atributos nome, quantidadePessoasServidas, possuiAcompanhamento, incluiRefrigerante, servidoNaEntrada, preço e
valor do desconto no navegador. O corpo do método formaPagamento possui apenas uma mensagem dinheiro de
retorno. Todo o conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo PHP.
O método formaPagamento está destacado através de um retângulo em vermelho com uma seta apontando para a
palavra polimorfismo também em vermelho.
70
Competência 03
Figura 67 - Exemplo da classe Pedido com o método verificarFormaPagamento recebendo um objeto $prato
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta
uma classe abstrata chamada Pedido, com três atributos protegidos, são eles, $nome, $quantidadePessoasServidas e
$preco. Além disso, a classe Pedido também possui um método abstrato chamado exibePedido, um método chamado
verificarFormaPagamennto que recebe um objeto da classe Prato como parâmetro e métodos get e set para cada
atributo. A classe Pedido possui todo seu corpo delimitado pela abertura e fechamento de chaves, assim como o corpo
do método exibePedido, verificarFormaPagamento e dos métodos get e set. Os métodos get não possuem parâmetros e
set possuem o parâmetro $valor. Os métodos get retornam o valor do atributo e o método set insere o valor do
parâmetro no atributo. O corpo do método verificarFormaPagamento possui diversos comandos echo para impressão
dos valores do atributo nome e do método formaPagamento no navegador. Todo o conteúdo do código está inserido
entre as tags de abertura <?php e de fechamento ?> de arquivo PHP.
71
Competência 03
Figura 68 - Exemplo de objeto da classe Prato, Prato Principal e Prato Promocional com polimorfismo
Fonte: A autora
Descrição: Código-fonte escrito na linguagem PHP para construção de programa de computador. O código apresenta a
inclusão dos arquivos prato.php, prato_principal.php e prato_promocional.php, a criação de um objeto chamado $prato
da classe Prato com o parâmetro Prato no construtor. E também é chamado o método verificarFormaPagamento da
classe Pedido passando o objeto $prato como parâmetro. Adicionamente a isto também temos, a criação de um objeto
chamado chamado $pratoPrincipal da classe PratoPrincipal com o parâmetro Prato Principal no construtor. E também é
chamado o método verificarFormaPagamento da classe Pedido passando o objeto $pratoPrincipal como parâmetro.
Além disso também temos, a criação de um objeto chamado chamado $pratoPromocional da classe PratoPromocional
com o parâmetro Prato Promocional no construtor. E também é chamado o método verificarFormaPagamento da classe
Pedido passando o objeto $pratoPromocional como parâmetro.
Figura 69 - Exemplo de saída da classe Prato, Prato Principal e Prato Promocional com polimorfismo
72
Competência 03
Fonte: A autora
Descrição: Saída no navegador do código-fonte escrito na linguagem PHP para construção de programa de computador.
A saída apresenta a mensagem Aproveitem nosso delicioso Prato, depois aparece a forma de pagamento relativos ao
objeto $prato com a mensagem, a(s) forma(s) de pagamento aceita(s) é(são): cartão de crédito/débito ou dinheiro.
Também é apresentada a mensagem Aproveitem nosso delicioso Prato Principal, depois aparece a forma de pagamento
relativos ao objeto $pratoPrincipal com a mensagem, a(s) forma(s) de pagamento aceita(s) é(são): cartão de
crédito/débito ou dinheiro. E por último, Também é apresentada a mensagem Aproveitem nosso delicioso Prato
Promocional, depois aparece a forma de pagamento relativos ao objeto $pratoPromocional com a mensagem, a(s)
forma(s) de pagamento aceita(s) é(são): dinheiro.
73
Competência 04
74
Competência 04
75
Competência 04
76
Competência 04
77
Competência 04
inserções realizadas na tabela prato com as diferentes informações. Esse resultado está destacado por um retângulo em
vermelho.
78
Competência 04
79
Competência 04
set possuem o parâmetro $valor. Os métodos get retornam o valor do atributo e o método set insere o valor do
parâmetro no atributo. Todo o conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?>
de arquivo PHP.
A classe Conexao é onde todos os comandos relacionados ao banco de dados são processados.
Esta classe está repleta de comentários no código explicando o funcionamento de cada método e o
papel de cada atributo. Os dados da classe Conexao são: host, usuário, senha, banco e conexão, e os
métodos são: conectar (para conectar com o banco de dados), executarQuery (para consultar as
informações no banco de dados) e obtemPrimeiroRegistroQuery (para retornar o primeiro registro
encontrado no banco de dados). As Figuras 78 e 79 mostram a primeira e a segunda parte do exemplo
da classe Conexao, respectivamente.
80
Competência 04
81
Competência 04
ela faz uso de um objeto da classe Conexao. Esta classe contém diversos comentários ao longo do
código explicando o funcionamento de cada método e o papel do atributo.
O único dado da classe RepositorioPratos é um objeto da classe Conexao, e os métodos
são: cadastrarPrato (para inserir um novo objeto prato no banco de dados), alterarPrato (para
atualizar as informações de um prato já existente no banco), removerPrato (para excluir um objeto
prato no banco), buscarPrato (para consultar um objeto prato específico no banco) e getListaPrato
(para retornar todos os objetos pratos existentes no banco de dados). Observe que no construtor da
classe RepositorioPratos é instanciado o objeto $conexao e no construtor da classe Conexao são
passados os seguintes valores para os parâmetros: host = “127.0.0.1”, usuario = “root”, senha = “”,
banco = “restaurantefomezero”. Esses dados correspondem às informações relacionadas ao banco
de dados.
Também foi desenvolvida a interface IRepositorioPrato que serve de contrato com a
classe RepositorioPratos. Esta interface possui apenas a assinatura dos métodos: cadastrarPrato,
alterarPrato, removerPrato, buscarPrato e getListaPrato.
A Figura 80 apresenta um exemplo da interface IRepositorioPrato e as Figuras 81 e 82
mostram a primeira e a segunda parte do exemplo da classe RepositorioPratos implementando a
interface IRepositorioPrato, respectivamente.
82
Competência 04
83
Competência 04
do método removerPrato possui instruções para executar o comando sql de remoção de um objeto específico da classe
Prato que possua o código igual ao valor do parâmetro $codigo.
84
Competência 04
outro chamado getListaPrato que não recebe parâmetros. O corpo do método alterarPrato possui instruções para
atribuir o valor do código, nome, quantidade de pessoas servidas e preço do objeto $prato as variáveis $codigo, $nome,
$quantidadePessoasServidas e $preco, respectivamente. Em seguida, essas variáveis são passadas como parâmetro
para execução do comando sql de atualização do resgistro correspondente ao valor do atributo $codigo na tabela prato
do banco de dados utilizando a conexão já estabelecida anteriormente. Logo após, é criado um objeto $prato da classe
Prato e os dados obtidos da consulta ao banco de dados são inseridos neste objeto, que posteriormente é retornado
pelo método. Já o corpo do método buscarPrato possui instruções para executar o comando sql de consulta de um
objeto específico da classe Prato que possua o código igual ao valor do parâmetro $codigo. Por outro lado, o corpo do
método getListaPrato possui instruções para executar o comando sql de consulta de todos os registros da tabela Prato
do banco de dados. Depois, os dados obtidos são organizados para instanciar um objeto para cada registro retornado
do banco de forma a construir uma lista de objeto da classe Prato. Assim, a lista lista de objeto da classe Prato
construída é retornada no método. Para finalizar um objeto chamado $repositorio da classe RepositorioPratos é
instanciado. Todo o conteúdo do código está inserido entre as tags de abertura <?php e de fechamento ?> de arquivo
PHP.
85
Competência 04
86
Competência 04
4.4 Buscar
Ao executar a aplicação do RestauranteFomeZero a tela inicial executa o método
getListaPrato que retorna todos os objetos Pratos existentes no banco de dados. Por outro lado, o
método buscarPrato retorna apenas um objeto Prato específico de acordo com o código que lhe foi
atribuído como parâmetro. Todas as informações fornecidas pelo usuário da aplicação são enviadas
através de um formulário HTML. As Figuras 86, 87 e 88 apresentam a primeira, segunda e terceira
parte dos detalhes da implementação do formulário HTML por meio da página index.php da
aplicação.
87
Competência 04
88
Competência 04
Fonte: A autora
Descrição: Código-fonte escrito em PHP e html para construção de programa de computador. O código apresenta a
primeira parte da aplicação RestauranteFomeZero. Primeiramente é exibido um código em php no qual ocorre a
inclusão do arquivo repositorio_pratos.php. Posteriormente, é atribuído a um objeto chamado $pratos da classe Prato o
retorno da chamada do método getListaPrato sem parâmetros. Este método foi chamado pelo objeto $repositorio. Em
seguida, uma variável código é recebido através do método $_GET do formulário html. É realizada uma verificação com
a estrutura condicional if, ou seja, dentro dos parênteses do if é verificado se a variável código recebida possui algum
valor, caso verdadeiro dentro do corpo do if, que é delimitado por chaves, será atribuído a variável $código o valor da
variável verificada, adicionalmente o objeto $repositorio chama o método buscarPrato que recebe como parâmetro o
valor de $código. Além da página destino passar a ser o aquivo alterar_prato.php e de um campo oculto ser inserido no
formulário com o valor de $código. Todo o conteúdo do código php está inserido entre as tags de abertura <?php e de
fechamento ?> de arquivo PHP. Depois, é exibido um código em html que recebe como título Restaurante Fome Zero, o
estilo css vindo do arquivo styles.css e cria um menu na lateral esquerda da página com as opções de: Prato Principal,
Prato Promocional e Sobremesa. Ao clicar em qualquer uma das opções o usuário será direcionado para a página de
index.php.
89
Competência 04
90
Competência 04
Fonte: A autora
Descrição: Código-fonte escrito em PHP e html para construção de programa de computador. O código apresenta a
segunda parte da aplicação RestauranteFomeZero. É exibido o código de um formulário html, com estilo css e alguns
comandos php. O formulário html está posicionado no centro e no lado direito da tela para cadastrar/alterar um objeto
da classe Prato com os campos: nome, quantidade de pessoas servidas e preço (R$). Abaixo dos campos está o botão
Salvar. Ao clicar no botão salvar todas as informações capturadas no formulários serão processadas e de acordo com o
valor da variável $destino os dados serão enviados para uma paǵina que irá direcionar para um método de cadastro,
alteração ou remoção dos dados. Esse formulário também possui um campo oculto chamado $codigo que vai indicar se
os campos do formulário deverão exibir os valores de um objeto específico da classe Prato para serem alterados ou se
os campos devem permanecer em branco para que o usuário insira novas informações. Em cada campo do formulário
existe uma verificação para preencher o campo caso o valor retornado de um objeto específico da classe Prato não
esteja vazio
91
Competência 04
A listagem é formada por meio de uma estrutura de repetição while que percorre uma lista de objetos da classe Prato
que foram retornadas do banco de dados. O registro retornado do banco é inserido em um objeto chamado
$pratoTemporario. A partir deste ponto é obtido o nome e o código do prato. O nome do prato está posicionado do
lado esquerdo e do lado direito estão os botões de Alterar e Remover. O botão de Alterar possui a funcionalidade de
capturar os dados de um objeto específico da classe Prato de acordo com a variável $codigo e preencher os campos do
formulário da página index.php com esses dados para que o usuário possa alterá-los. Já o botão de Remover possui a
funcionalidade de enviar as informações de um objeto específico da classe Prato de acordo com a variável $codigo para
ser removido do banco de dados.
92
Conclusão
Estudante,
Chegamos ao fim das quatro competências previstas para esta disciplina, nela tivemos a
oportunidade de aprender os princípios básicos da Programação Web Orientada a Objetos.
Começamos com os conceitos básicos como o surgimento e a importância da programação orientada
a objetos.
Depois foi apresentado um comparativo entre o paradigma orientado a objetos e o
paradigma estruturado, em seguida foi mostrado o conceito de diversos elementos do paradigma
orientado a objetos tais como: classe, objeto, atributo, método, métodos get e set, atributos e
métodos estáticos, construtor, herança, classe abstrata, encapsulamento, classe final, associação,
polimorfismo e interface. Os conceitos apresentados podem ser utilizados em qualquer outra
linguagem de programação para web desde que siga o paradigma orientado a objetos.
E por fim foram exibidas as etapas para implementar uma aplicação utilizando técnicas
de orientação a objetos. Foram demonstrados os passos para a configuração da aplicação,
desenvolvimento das classes da aplicação e as funcionalidades de cadastro, alteração, remoção e
busca das informações no banco de dados.
Vocês acham que acabou? Não acabou! É isso mesmo! A área de Desenvolvimento de
Software é muito abrangente e aplicável a incontáveis segmentos, educação, comércio, ciência e
tecnologia, gestão, segurança, entre outros. Impossível enxergar esta lista inteira, mas dá para
imaginar. Vocês só precisam imaginar uma solução para um problema e programá-la.
As possibilidades e oportunidades a partir dos conhecimentos adquiridos são infinitas,
imagine quando combinados com novos conhecimentos das próximas disciplinas. Espero que tenham
aproveitado ao máximo o material, a disciplina e queriam aprender e se aprofundar mais, para que
possam se tornar profissionais bem qualificados e bem-sucedidos.
93
Referências
Arroyo, Alexandre e Santos, Fabio. Programação para a Web utilizando PHP. Centro de Computação
da Unicamp - DTTEC, 2002.
Arroyo, Alexandre e Santos, Fabio. PHP Avançado. Centro de Computação da Unicamp - DTTEC, 2006.
Silva, Higor Ernandes Ramos e Ferreira, Leonardo Pimentel. São Paulo: Apostila do Curso de PHP
Orientado a Objetos. PET Sistemas de Informação, Faculdade de Computação, Universidade Federal
de Uberlândia, 2015.
Gilmore, W. Jason. Apress: Beginning PHP and MySQL 5: From Novice to Professional, 2° Edição,
2006.
Beighley, Lynn e Morrison , Michael. O'Reilly: Use a Cabeça – PHP com MySQL, 2009.
94
Minicurrículo do Professor
95
Possui 6 anos de experiência na área de Tecnologia da Informação, já atuou
profissionalmente exercendo atividades de: analista de sistemas, programador, testador e gerente
de configuração. Atualmente é professor de ensino à distância do curso técnico de Desenvolvimento
de Sistemas da Escola Técnica Estadual Professor Antônio Carlos Gomes da Costa (ETEPAC).
Possui conhecimento nas tecnologias: Java SE, JSP, JSF, DAO, JavaBeans, IDE Eclipse,
Hibernate, JPA, Spring para o controle das transações, Struts para arquitetura em camadas (MVC),
Container Apache Tomcat, Padrões de Projeto. Aplicação integrada com banco de dados Oracle,
MySQL e PostgreSQL e utilização de PL/SQL. Uso de ferramenta ETL e Shell Script.
Suas áreas de interesse são: engenharia de software, priorização de software, ciclo de
vida do software, metodologias ágeis, desenvolvimento de software, desenvolvimento web,
desenvolvimento mobile, plataformas de desenvolvimento, internet das coisas, técnicas de
inteligência artificial, técnicas de previsão de séries temporais, entre outros.
96