Você está na página 1de 49

Programação Orientada a

Objetos – OOP

Desenvolvimento de
Aplicações em Camadas
Renato Haddad
Microsoft Most Valuable Professional
Brasil

Meu nome é Renato Haddad e sou Microsoft Most Valuable Professional no Brasil

1
Objetivo

Mostrar os conceitos de programação


orientada a objetos OOP e o
desenvolvimento de aplicações em
camadas (n-tier), as vantagens,
estruturas e comunicação

O objetivo é deste treinamento é mostrar os conceitos de programação orientada a objetos


OOP e o desenvolvimento de aplicações em camadas (n-tier), as vantagens, estruturas e
comunicação. Este conteúdo tem se tornado uma prática comum no desenvolvimento de
aplicações.

2
OOP

Vamos ver os conceitos do OOP através de exemplos práticos

3
Definição - OOP
Técnica de programação de forma estruturada
com a finalidade de reaproveitar o código
existente e implementar novas classes quando
necessário

O OOP é uma técnica de programação de forma estruturada com a finalidade de


reaproveitar o código existente e implementar novas classes quando necessário. A
classe é o principal símbolo da orientação a objetos e é o modelo que representa
uma entidade, ou seja, a estrutura do objeto é baseada em uma classe. Tudo em
.NET é um objeto, desde uma variável até um controle ou uma classe. As principais
vantages do OOP são o reuso de código e a capacidade de expansão do mesmo.

4
Pilares do OOP

Abstração Polimorfismo

Herança Encapsulamento

O OOP é baseado nos seguintes pilares: Abstração, Polimorfismo, Herança e


Encapsulamento

5
Abstração

É a capacidade de generalizar um objeto


como um tipo de dado que possua um
conjunto específico de características
(propriedades) e possa executar um grupo
de ações (métodos)

Abstração é a capacidade de generalizar um objeto como um tipo de dado que


possua um conjunto específico de características (propriedades) e possa executar
um grupo de ações (métodos)

6
Abstração de um carro
Public Class Carro
Public VelocidadeMaxima As Integer
Public NomeDoModelo As String
Public Sub Acelerar()
‘codigo para acelerar
End Sub
Public Sub Parar()
‘codigo para parar
End Sub
End Class

Veja um exemplo da abstração de uma classe chamada Carro contendo duas


variáveis e dois métodos chamados Acelerar e Parar.

7
Encapsulamento
É a exposição das propriedades e métodos
de um objeto enquanto a implementação
real fica oculta do mundo externo. O objeto
é tratado como uma caixa preta.
Isso permite que os desenvolvedores criem
objetos que podem ser alterados sem afetar
o código-fonte que os utiliza

Encapsulamento é a exposição das propriedades e métodos de um objeto enquanto a


implementação real fica oculta do mundo externo. O objeto é tratado como uma
caixa preta. Isso permite que os desenvolvedores criem objetos que podem ser
alterados sem afetar o código-fonte que os utiliza

8
Encapsulamento

Veja um exemplo do encapsulamento de uma classe chamada Pessoa contendo três


propriedades: PrimeiroNome, Sobrenome e NomeCompleto. Note o GET e o SET
para cada propriedade para atribuir o respectivo valor. A propriedade
NomeCompleto é do tipo ReadOnly e o resultado será o conteúdo das outras duas
propriedades. Observe ainda os tipos declarados que são do tipo String.

9
Encapsulamento

Nesta classe, a idéia é idêntica a classe anterior, no entanto, a propriedade


NomeCompleto está declarada, é do tipo ReadOnly e contém apenas a leitura da
propriedade, pois o conteúdo foi montado automaticamente dentro das outras
propriedades. Assim, você não precisa saber como que estas classes foram
montadas, pois as três propriedades estarão disponíveis quando você for usar o
objeto. Por isso que dizemos que o encapsulameto é uma caixa preta.

10
Polimorfismo
É o conceito segundo o qual objetos diferentes
possuem implementações diferentes de uma
mesma propriedade ou método. Por exemplo, um
helicóptero e um jato tem o método LevantaVoo
e a propriedade AltitudeMax, no entanto são
implementações diferentes.

Polimorfismo é o conceito segundo o qual objetos diferentes possuem


implementações diferentes de uma mesma propriedade ou método. Por exemplo,
um helicóptero e um jato tem o método LevantaVoo e a propriedade AltitudeMax,
no entanto são implementações diferentes.

11
Polimorfismo

Veja este exemplo de polimorfismo onde temos duas classes: MontanhaRussa e


Carrossel. Ambas contém um método chamado IrEmFrente, porém o conteúdo de
cada método é diferente. Já na camada de apresentação onde as classes serão
consumidas, cada classe está instanciada nos respectivos objetos oMontanhaRussa e
oCarrossel, o qual irão invocar o mesmo método BrincaNoParque passando o
próprio objeto como argumento. Este método é que vai chamar o método
IrEmFrente em cada classe, o qual implementa códigos diferentes. Cabe ressaltar
como que você instancia uma classe. Se for no VBNET use o
DIM variável objeto As New classe
Se for no C# use: variável objeto = new classe

12
Polimorfismo / Encapsulamento

Não confunda os dois, pois um refere-se ao


fato de que existem funções que podem ser
atribuídas a uma classe sem que sua
implementação seja conhecida, e o outro
define que duas ou mais classes possuam a
mesma interface

Não confunda Polimorfismo e Encapsulamento, pois um refere-se ao fato de que


existem funções que podem ser atribuídas a uma classe sem que sua implementação
seja conhecida, e o outro define que duas ou mais classes possuam a mesma
interface.

13
Polimorfismo / Encapsulamento

Veja este exemplo onde temos uma Interface chamada IumDiaNoParque contendo
um método chamado IrEmFrente. Existem duas classes (MontanhaRussaInterface e
CarrosselInterface) que implementam o IumDiaNoParque através da palavra chave
Implements. Cada classe contém o método IrEmFrente que implementa o
IrEmFrente do IumDiaNoParque. Veja na camada que vai usar estas classes, onde
os objetos estão instanciados e chamam o método IrEmFrente.

14
Polimorfismo / Encapsulamento

Neste exemplo é definida uma Interface chamada IEmpregado contendo as


propriedades PrimeiroNome, Sobrenome e Salario e uma Function chamada
AlteraSalario que recebe um argumento. Em seguida, temos a classe
clsEmpregadoInterface que implementa IEmpregado e definem as respectivas
propriedades da classe. Note que na declaração de cada propriedade é implementada
a interface junto com a propriedade.

15
Polimorfismo / Encapsulamento

Observe a implementação da interface na definição de cada propriedade, assim


como na Function. É importante ressaltar que devem ser observadas as devidos
nomes das propriedades definidas na interface.

16
Herança
É o conceito pelo qual uma classe por ser
baseada em outra, chamada classe base. A
herança fornece um mecanismo para criar
hierarquias de objetos

Herança é o conceito pelo qual uma classe por ser baseada em outra, chamada
classe base. A herança fornece um mecanismo para criar hierarquias de objetos. É
sem dúvida um dos melhores recursos de se implementar, tornando o reuso de
códigos extremamente simples é rápido.

17
Herança

Veja este exemplo de herança. Existe uma classe chamada clsAviao contendo duas
propriedades (AltitudeMax e Inventor) respectivamente, assim como a Function
LevantaVoo que recebe um argumento. A propriedade Inventor é ReadOnly, ou
seja, você não consegue atribuir um valor, pois o mesmo já está definido na
declaração da classe. Se você for definir uma classe para um avião a jato, teria que
declarar estas mesmas propriedades e a Function. Aqui entra o recurso de herança.
Veja na declaração da classe clsJato o uso do Inherits clsAviao, informando que a
classe herda a classe aviao e, em seguida, a declaração da mesma Function
LevantaVoo. Isto é possível porque na declaração da Function está como
Overridable, ou seja, esta função pode ser regravável. Portanto, quando você for
criar uma classe, pesquise se já não existem classes prontas para tal finalidade e
herde a mesma. Com isso, de dentro da classe clsJato você terá acesso a todos os
itens declarados na classe clsAviao.

18
Herança

Este é o fomulário que irá consumir as classes. Note que as duas classes são
instanciadas nas respectivas variáveis de objeto e o acesso as propriedades são
enxergadas tanto na classe clsAviao quanto clsJato. Desta forma, como a classe
clsJato herda a clsAviao, o código fica transparente para o desenvolvedor, o acesso
ocorre na classes, independente de existir ou não uma herança.

19
Herança
Escopo da Classe
Inherits Indica a classe a ser herdada
NoInheritable Indica que a classe que utiliza este elemento não pode ser herdada em
nenhuma outra classe
MustInherit Indica que a classe que utiliza este elemento só pode ser utilizada por
meio da sua herança em uma outra classe

Escopo de Métodos
Overridable Indica que o método que utiliza este elemento pode ser sobreposto
NotOverridable Indica que o método que utiliza este elemento não pode ser sobreposto
MustOverride Indica que o método que utiliza este elemento só pode ser implementado
por meio da sobreposição dele
Overrides Indica que o método está sobrepondo o método da classe básica

O escopo da classe é um tópico muito importante, pois demonstra onde que a classe
poderá ser vista por outra. O Inherits indica a classe a ser herdada. O NoInheritable
indica que a classe que utiliza este elemento não pode ser herdada em nenhuma
outra classe. O MustInherit indica que a classe que utiliza este elemento só pode ser
utilizada por meio da sua herança em uma outra classe.
Veja o escopo dos métodos da classe. O Overridable indica que o método que
utiliza este elemento pode ser sobreposto. O NotOverridable indica que o método
que utiliza este elemento não pode ser sobreposto. O MustOverride indica que o
método que utiliza este elemento só pode ser implementado por meio da
sobreposição dele. O Overrides indica que o método está sobrepondo o método da
classe básica.

20
Overload
É possível usar um único método
(Function ou Sub) para diversas formas
de implementação. Pode-se definir um
método com o mesmo nome para vários
tipos de parâmetros de entrada e saída, e
cabe ao Framework interpretar um a um e
escolher o correto

O .NET permite o Overload, que é a sobrecarga de operadores. É possível usar um


único método (Function ou Sub) para diversas formas de implementação. Pode-se
definir um método com o mesmo nome para vários tipos de parâmetros de entrada e
saída, e cabe ao Framework interpretar um a um e escolher o correto

21
Overload

Veja nesta classe que temos quatro Functions chamada Media, porém cada uma
com diferentes tipos de campos e argumentos. Quem decide qual Function executar
é o Framework.

22
Overload

A sobrecarga se aplica também a procedimentos. Neste exemplo temos a definição


da mesma rotina com três diferentes tipos de argumentos. Para usar o overload,
instancie o objeto e chame as funções e as rotinas passando diversos argumentos
diferentes, conforme a sua necessidade. A vantagem do overload é que você não
precisa converter o argumento para um determinado tipo, assim como a quantidade
de argumentos.

23
Delegate

É uma funcionalidade poderosa no OOP.


Uma vez que os objetos podem possuir
eventos, a linguagem deve possuir uma
forma mais elegante de um objeto fazer uso
de métodos de outros objetos

O Delegate é uma funcionalidade poderosa no OOP. Uma vez que os objetos podem
possuir eventos, a linguagem deve possuir uma forma mais elegante de um objeto
fazer uso de métodos de outros objetos

24
Delegate

Neste Delegate temos a definição da classe clsDelegate contendo a função Compara


que recebe dois números inteiros e retorna um Boolean. O método Ordena recebe
dois argumentos, sendo um inteiro e a própria função Compara. Internamente são
executados dois loopings para percorrer todos os dados passados. Existem ainda
duas funções Maior e Menor que recebem dois inteiros e retornam um Boolean.

25
Delegate

Veja o uso do Delegate onde a classe é instanciada, é definida uma matriz com os
dados e chamado o método Ordena, passando os argumentos e exibido o resultado.

26
N-tier

O desenvolvimento em camadas tem conquistado um espaço importante no


desenvolvimento de aplicações, e é importante saber os conceitos, quando e como
aplicar esta arquitetura.

27
N-tier
O que é esta arquitetura?
Quais as vantagens?
Em quais situações aplicar?

Arquitetura de N-tier ou desenvolvimento em camadas é a forma de estruturar os


objetos de forma que possamos tirar o maior proveito em produtividade,
desempenho e manutenção. Existem muitas vantagens em adotar esta arquitetura,
por exemplo, reuso de código, fácil manutenção, segurança, performance,
escalabilidade e distribuição de códigos. Esta arquitetura se aplica em cenários de
Internet, aplicações distribuídas e acesso a dados a partir de diferentes meios de
comunicações através de Web Services.

28
N-tier
!
Public Web
Services

Smart Building
Clients Block
Services
Standard
Browsers Internal
Services
Smart
Devices Servers,
Data, Hosts

Com o .NET as aplicações são construídas sobre uma plataforma comum. A integração entre elas é intuitiva.
As aplicações Web estão usando os protocolos da rede e XML para permitir melhor integração entre os
serviços na Web. Os padrões de comunicação para a Internet são abertos. Imagine se pudessemos unir os
serviços da aplicação de back-end usando protocolos de Internet como http de forma transparente para o
usuário e aplicação. Podemos usar qualquer Web Service que possa se comunicar usando XML sobre
HTTP.

29
N-tier
Application
Business Data Source
Front-
Front-end

Application Application Application


Front-
Front-end Front-
Front-end Front-
Front-end

interoperabilidade
Data Source Business

Data Source

Uma camada representa uma unidade lógica da aplicação, podendo ser:


Applicattion (Front-End) – que é a interface com o usuário, seja Web, Windows, celular ou pocket PC
Business – que é uma classe de negócio (Class Library) que representa uma regra de negócio, uma DLL, um
componente ou um Web Service
Data Source – representa a fonte de dados, que pode ser um banco de dados, um arquivo XML, um arquivo
texto, etc.
Existem diversos modelos de camadas indo de uma a três camadas, e em alguns casos podemos até chegar a
quatro camadas. Via de regra, o modelo de três camadas é o mais usado.

30
N-tier (1 / 2)

Client

O modelo mais comum é o de uma camada, onde temos a interface e a lógica da


aplicação juntas. Se você acessar um banco de dados que suporte Stored Procedures,
consideramos que o modelo é de duas camadas. Mais a frete veremos o que é uma
Stored Procedure e suas vantagens. Neste caso, o produto final será um EXE, e se
você precisar distribuir parte de uma lógica desenvolvida nesta aplicação, não terá
como. Já o banco de dados fica disponível para qualquer aplicação que precise
manipular os dados.

31
N-tier

Veja este exemplo que contém uma DLL chamada clsAcentuacao contendo o
método TiraAcentos que recebe uma String como argumento e retorna uma String.
Está é uma Class Library que você desenvolve e distribui a todos os
desenvolvedores que precisarem utilizar. Na camada de apresentação, um
formulário por exemplo, você deve referenciar a DLL no Solution Explorer do
projeto, e no código basta instanciar o componente com a devida classe e o método,
passando o argumento, se necessário. Com isso, a DLL poderá ser utilizada em
qualquer tipo de projeto. Caso haja uma alteração na DLL, será preciso distribuir a
todos os desenvolvedores a nova DLL, porém o executável Front-End não é preciso.

32
VB.NET + C#

Veja neste exemplo que a DLL criada está escrita em CSharp contendo a classe
Frete e o método Calcula que recebe e retorna um valor do tipo Double. Já a camada
de apresentação foi escrita em VBNET, o qual referencia a DLL no Solution
Explorer, instancia o componente e o usa, por exemplo, atribui a propriedade e
chama o método Calcula. Esta é uma das grandes facilidades do .NET, a
independência de linguagem, pois o produto final será em Intermediate Language.
Esta mesma camada em Csharp poderá ser usada em qualquer linguagem no .NET,
seja em Web, Windows, Pocket, Smartphone, Console, etc.

33
N-tier

Client
Business

Em um modelo de três camadas temos a interface, o database e a classe de negócio


(DLL). Se você precisar acessar algum dado no banco de dados, terá que ser via
DLL, pois o acesso direto Interface – banco de dados não é possível. Isto garante
segurança, escalabilidade, produtividade, fácil manutenção e distribuição.

34
N-tier

Veja neste exemplo uma DLL desenvolvida que chama uma Stored Procedure no
SQL Server, passando alguns campos como argumentos.

35
Stored Procedures
O que são?
Quais as vantagens?

36
Stored Procedures

Neste exemplo temos a camada do aplicativo com a Stored Procedure declarada, a


qual irá ler dados de uma tabela e preencher um ListBox no ASPNET. Note que o
conteúdo da Procedure é uma instrução SQL Select.

37
Stored Procedures

Veja um exemplo de uma Procedure que recebe um argumento e o usa na clausula


Where. Na Procedure é importante declarar todos os argumentos, os tipos e os
tamanhos a serem usados. Neste caso, o argumento é o código do cliente, tipo
VarChar com 5 caracteres.

38
Stored Procedures

Veja um exemplo da declaração de diversos tipos de argumentos na Procedure. Na


camada de apresentação quem chamará a Procedure é o Command, portanto, cada
argumento deverá ser adicionado ao Command. Quando a procedure for chamada,
os argumentos são recebidos e utilizados dentro da procedure.

39
Server Application
Serviço único que disponibiliza forma
padrão para acesso as informações do
sistema

Ambiente gerenciado e escalável para


garantir atendimento aos usuários

Rotinas de negócio complexas com uma


única versão sendo executada,
independente dos sistemas que estiverem
utilizando

Saiba as vantagens de se criar um Server Application:


- Serviço único que disponibiliza forma padrão para acesso as informações do
sistema
- Ambiente gerenciado e escalável para garantir atendimento aos usuários
- Rotinas de negócio complexas com uma única versão sendo executada,
independente dos sistemas que estiverem utilizando

40
Server Application
Ambiente centralizado para aplicação de
mudanças na lógica de negócios,
permitindo controle mais efetivo quanto a
versionamento e segurança das
informações

Facilidade em servir informações para


servidores web, retirando deles o trabalho
pesado, responsável pela implementação
da lógica de negócios

Outras vantagens que se destacam para um Server Application:


- Ambiente centralizado para aplicação de mudanças na lógica de negócios,
permitindo controle mais efetivo quanto a versionamento e segurança das
informações
- Facilidade em servir informações para servidores web, retirando deles o trabalho
pesado, responsável pela implementação da lógica de negócios

41
Server Application

Client
Server App

Sendo assim, qualquer requisição ao banco de dados deverá ser feito ao Server
Application, o qual é o responsável pelo gerenciamento.

42
O que é um Web Service?
É uma classe desenvolvida no .NET para
atender a demanda de aplicações / sites
internos ou externos.

<WebMethod()> Public Function …


… instruções …
End Function

Web Service é uma classe desenvolvida no .NET para atender a demanda de


aplicações / sites internos ou externos. Veja um exemplo de um método a ser
exposto via http, o qual recebe e retorna um Double. A TAG WebMethod é a chave
de um Web Service. Todo Web Service deverá estar em um servidor WEB, e
quando solicitado, é gerado um arquivo XML que é empacotado com um protocolo
SOAP e transmitido via http para quem o solicitou.

43
Onde e porquê usar WS?
Qualquer aplicação pode consumir um WS
disponível na WEB (agendas, catálogos,
dados bancários, médicos, validação de
cartões, notícias, etc)

O objetivo é integrar aplicações escrevendo


cada vez menos códigos (reutilização)

Onde e porquê usar Web Service?


Qualquer aplicação pode consumir um Web Service disponível na WEB (agendas,
catálogos, dados bancários, médicos, validação de cartões, notícias, etc). O objetivo
é integrar aplicações escrevendo cada vez menos códigos (reutilização).

44
Vantagens do Web Services

Negócios Conectados
Agilidade na conexão a clientes,
clientes, parceiros
e funcionários,
funcionários, através de soluções
construídas rapidamente e a baixos
custos Experiências
Conectadas
Desenvolvimento Informação a qualquer
hora, em qualquer lugar,
Conectado em qualquer dispositivo
Interoperabilidade com
sistemas construídos
em qualquer plataforma
ou linguagem
Sistemas Conectados
Integração com sistemas legados,
legados,
dentro e fora da empresa

Para usar Web Services é preciso estar sempre conectado, pois ele roda sobre os protocolos
da Internet. Você poderá consumir um Web Service em qualquer tipo de aplicação,
proporcionando integração entre as plataformas, o legado, os aplicativos e obter a
informação em qualquer lugar e hora.

45
Recursos dos Web Services

Segurança
Garantia de Entrega
Orquestração
Eventos
Transações

Sistemas Sistemas Dados Verticais e


Legados Externos Corporativos Infra-
Infra-Estrutura

Os recursos dos Web Services permitem integrar sistemas legados, sistemas externos, dados
corporativos e soluções verticais e infra-estrutura. Os Web Services permitem segurança,
garantia de entrega das solicitações, orquestração, eventos e transações.

46
Modelo de Web Services
Web Site: HTML Cliente:
O Browser
Exibe a informação
para um usuário,
que reage ou não a
ela

Web Service: XML Cliente:


Sistemas
O sistema que recebe
a informação (Excel,
ERP) processa a
Web informação assim que
Service a recebe

Legacy

Veja um exemplo deste modelo: o linguagem de marcação de um site é o


HTML, onde o Internauta pode ou não interagir com o site. Os dados podem
ser estáticos ou dinâmicos, mas sempre deverão pesquisar a origem dos
dados para montar o site. Já no modelo de Web Services, o conteúdo é um
XML que pode ter qualquer tipo de Interface, Web, Windows, Office,
Pocket, Smartphone ou qualquer outra interface que permita um http.

47
Uso do Web Service

Neste exemplo temos um método chamado Categorias que lê as informações no


banco de dados e retorna um XML contendo um DataSet com a tabela categorias na
memória. Já as camadas de apresentação é uma aplicação Windows, Web ou
Smartphone. Com isso, no modelo de desenvolvimento em camadas, o Web
Services é considerado como uma camada.

48
Client ! "! #"

Web Server

Server App

"! #"

Este é o modelo de arquitetura de acesso a dados no desenvolvimento em camadas.


Note que o cliente pode ser qualquer Front-End. Se for usar um Web Server, a
solicitação deverá ser feita ao mesmo, podendo ser um Web Services ou uma
aplicação Web. Se for uma camada que esteja no servidor de aplicação, terá que
instanciar na sua aplicação e solicitar os dados. Independente do modelo, qualquer
solicitação ao banco de dados deverá ser feita por uma DLL, pois diretamente não é
possível. Se você estiver dentro de uma rede onde tenha o acesso à rede TCP/IP,
opte por Class Library ao invés de Web Service. Isto será muito mais rápido que
qualque outro meio, pois o acesso será direto via TCP/IP. Por outro lado, se você
não tiver acesso a rede interna da empresa, mas tem acesso via http, faça requisições
via Web Services. Com isso, a integração de dados entre as empresas promete unir
diversos mercados, plataformas e aplicações on-line em tempo real.

49