Você está na página 1de 15
‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - @- /DESENVOLVIMENTO Bw, embod SR et |p ston? Buco ME RMM orae ie oe Meee hase ntar sua primeiras _ Programagao Orientada a Objetos em 10 ligdes praticas — Parte 06 José Carlos Macoratt erm NET, sual Sudo entafora, 22 do aposio de 2014 wes / Até 0 momento apresentamos os conceitos da programagso —_[A*] [A] orientada a objetos afetos a linguagem VB .NET usando uma aplicagao bem simples de controle de saldos bancérios, na qual definimos uma classe base Conta e uma classe Poupanca que herda dessa classe base. \Vimos como criar métodos e propriedades na classe base © como especializar essa classe criando classes derivadas. Vimos como usar os recursos da heranga, sobrescrever um método e como interagir como controles de formularios em uma aplicagao Windows Forms. Neste artigo vamos definir uma interface e mostrar como podemos usar OS seus recursos em nossa aplicagao bancaria. Definindo e usando uma interface —- 06 Nesta aplicagdo vocé vai aprender a definir e utilizar interfaces. Objetivo: Criar uma pequena aplicagao para controlar os saques, depésitos e saldos de uma conta pessoal usando os conceitos de programagao orientada @ objetos na linguagem VB .NET. Recursos usados: Visual Studio 2012 Express for Windows desktop htpsimastrs.com bridesenvohimentalvisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pale-O8race= 1519021197&scurce=single 15, ‘ori062016 htp:imastrs.com bridesenvolvimertalvisual_studofrogramacao-crlentada-chjetos-em-10-icoes-praticas-parte-08 trace: Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - Nota: Neste momento ja se encontra disponivel a versdo 2013 E importante salientar que a ferramenta usada 6 gratuita, nao possui restrigdes e 6 totalmente funcional. Ao fazer o download da ferramenta, voeé também pode baixar 0 pacote de idioma para localizar 0 produto para a lingua portuguesa. Problema: Vocé deseja controlar sua conta bancaria pessoal registrando 08 saques, depésites e controlando o saldo da conta usando os conceitos da programagdo orientada a objetos da linguagem VB .NET. Conceitos Basicos — Interfaces Vamos pensar um pouco sobre o que fizemos até agora. Criamos uma classe base Conta, a partir da qual criamos a classe derivada Poupanca. ‘Temos assim duas classes concretas: a classe Conta ea classe Poupanca, Se pensarmos em um banco do mundo realllembre-se que classes devem modelar 0 mundo real) iremos constatar que na verdade ndo podemos abrir uma conta genérica, Muito provavelmente o banco ir nos oferecer um tipo de conta especifico para escolha. Em geral temos a conta corrente, a conta poupanga, a conta especial ete. Dessa forma, a nossa classe Conta deveria definir 0 comportamento comum de um conta genérica mesmo que nunca féssemos criar uma conta desse tipo, Criamos, entéo, uma classe base Conta abstrata e nela definimos apenas © comportamento comum a uma conta genérica, implementando alguns métodos ¢ deixando outros como métodos abstratos. Outra alternativa seria criar uma interface ao invés de uma classe abstrata. Uma interface, no paradigma da orientagao a objetos, é um tipo de classe que contém apenas as assinaturas de métodos, propriedades, eventos e indexadores. A implementagéo dos membros ¢ feita por uma classe conereta ou estrutura (struct) que implementa os métodos da interface. Uma interface nunca pode ser instanciada e contém somente as assinaturas dos métodos, nao possuindo construtores, nem campos e seus membros séo sempre puiblicos endo podem ser declarados como ro0ztarescurce=single 216 ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - estéticos (static), nem como overridable, Isso significa que os métodos no podem ser sobrepostos e devem ser implementados. Uma interface 6 parecida com uma classe abstrata. A diferenga ¢ que uma classe abstrata pode possuir métodos que ndo estejam implementados e outros que estejam implementados. Come © VB.NET no suporta heranga miltipla, as interfaces permitem que uma classe estenda muiltiplas interfaces, contornando o problema (se 6 que isto 6 um problema). Para implementar uma interface no VB.NET, usamos 0 modificador ~ Implements. As interfaces so declaradas usando a palavra-chave — Interface. Geraimente, 0 nome dado a uma interface comega com a letra | Podemos ter duas sintaxes para 0 uso com interfaces: Interface IForma Interface [Forma End Interface End Interface Class Linha Class Linha: Implements Forma Implements [Forma End Class End Class © Uma interface no VB.NET nao pode conter campos; somente métodos, propriedades e eventos © Todos os membros de uma interface sao piblicos e néo podem usar um modificador de acesso; © Na classe que implementa a interface, cada implementagao do método precisa especificar 0 método da interface que ele implementa usando a palavralmplements, seguido pelo nome da interface o nome do método: © O nome da interface e o nome do método sdo separados por dois pontos(:). Podemos criar para 0 nosso exemplo uma interface, ao invés de uma classe abstrata, como fizemos na aula anterior. Podemos criar uma interface para Contacontendo 3 métodos: Depositar(), Sacar() & Saldo, que devera ser implementada por todo o tipo de conta para usar a interface. Construindo o projeto Para tomar 0 exemplo mais simples e facil de entender, eu nao vou criar htpsimastrs.com bridesenvohimentalvisual_studofrogramacao-crienlada-chjetos-em-10icoes-praticas-pale-08"trace= 1519021197&scurce=singlo 16 orioa2016 rogramazéo Orientada a Objetos em 1OligSes préticas- Paro 05 - um projeto Windows Forms, como fiz na aula anterior. Vou oriar um projeto do tipo Console Application. Vou definir a interface Conta mostrar como podemos implementé-la em duas classes: concretas: ContaPoupanca e ContaCorrente. Abra 0 Visual Studio 2012 Express for desktop e clique em New Project. Selecione o template: Visual Basic -> Windows -> Console Application. Informe o nome OOP_Interface e clique no botao OK: Apna a omings onan in eicoe Criando a interface Conta No menu PROJECT clique em Add Class. Selecione o template Class & informe o nome IConta.vb clique em Add: _ al eosin) 2 eT ee SS Eom ams | a FL como) coments BD arte cots 4G) sooner ont. cnmerton BD) tenntniertie Cnmontons Para definirmos uma interface no VB .NET, temos que usar a palavra- chave Interface antes do nome da interface (IConta) ¢ terminar com a htpsimastrs.com bridesenvohimertalvisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pate-08trace= 1519021197&scurce=singlo 4/16, ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - declaragao End Interface, f Tunic Entertace Tones + Vamos comegar definindo a nossa interface da seguinte com 2 métodos © 1 propriedade: 1. Saldol) - propriedade somente leitura; io Depositar)) - método que permite sacar um valor da conta; Sacar() - método que permite depositar um valor da conta. \Veja como deve ficar 0 cédigo VB .NET da nossa interface |Conta: 1) Public Interface Tconta 2| Function Depositar(valor As Decimal) As Boolean 3| Function Sacar(valor As Decinal) As Soalean 4) Readonly Property Saldo() As Decimal 5 | ena Interface Note que temos apenas a declaragao da propriedade ¢ dos métodos, mas néio a sua implementagdo. A implementagao destes membros deveré sor feita pelas classes concretas. Criando a classe ContaPoupanca e implementando a interface IConta Vamos criar agora a classe conoreta ContaPoupanca. No menu PROJECT, clique em Add Class. Selecione o template Class ¢ informe o nome ContaPoupanca.vb e clique em Add. htpimastrs.com bridesenvohimentavisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pale-08"trace= 1519021197&scurce=singlo 8/16, ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas - Parto 05 - ‘commentens| 7 Tre commenters enpciconb) B ACCNET yoo) Comments ocr lente eerie A seguir, digite logo abaixo da declaragao da classe a palavra Implements e a seguir a interface IConta: Seoeerer Telnet tc TT ‘Ao teclar ENTER, Visual Studio iré criar automaticamente os métodos propriedades da interface que devemos implementar, conforme mostra a figura abaixo: Pubisc Function Orposttervalor As Deine!) As Boolean Inplenents [Conte Depositar ers SS, Vamos definir duas variéveis privadas na classe ContaPoupanca: © _saldo — armazena o valor do saldo da conta; © _limiteDiario — define o valor limite dirio para realizagao de saques. htpsimastrs.com bridesenvohimentavisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pate-08trace= 1519021197&scurce=singlo 615, ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - 1| Private _saldo As Decimal 2 | Private “lieiteblarso As Decimal 1. Implementando o método Depositar Vamos implementar 0 método Depositar conforme 0 cédigo abaixo Public Function Depositar(valor As Decinal) As Boolean Inplenents ICenta [Salde.#= valor Console.WriteLine(String.Format("Deposito realizado con sucesso Return True End Funetion © método Depositar da ContaPoupanca iré incrementar o valor do saldo da conta pelo valor do depésito e retornar um valor igual a True, 2. Implementando o método Sacar No método Sacar, temos que verificar se existe saldo na conta e se o valor do saque é superior ao limite didrlo (definido como R$ 1 mil). Se houver saldo € o valor do saque estiver dentro do valor limite, iremos exibir uma mensagem de saque realizado com sucesso. A seguir temos a implementagao do métedo Sacar)) para a classe ContaPoupanca: i | Public Function Sacan(valor As Decimal) As Boolean Inplenents IConta.Sact 2 If sgalde ¢ valor then 3 Console.WriteLine("Saldo insuficiente.") 4 Return False 5 ElseIf linfteDiario + valor > 1000 Then 5 Condole.WriteLine("Valor superior a0 Limite diario!”) 5 Return False else “saldo -= valor ae CLimitedierio += valor hu Tonsole.kriteLine(string.Format("Saque realizado con sucesso 2 Return True b End Tf 14] end Function 3. Implementando a propriedade Saldo A propriedade Saldo apenas permite que o seu valor seja lido, nao podendo ser alterado diretamente fora da classe. A isso chamamos encapsulamento. Dessa forma, o valor do Saldo somente poder ser alterado u indo os métodos Sacar() e Depositar) da propria htpsimastrs.com bridesenvohimentalvisual_studofrogramacao-crienlada-chjetos-em-10icoes-praticas-pate-O8trace= 1519021197&scurce=single 7115, ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - classe. A seguir, temos 0 cédigo da implementagao da propriedade Saldo: Public ReadOnly Property Saldo As Decinal Implements IConta.Saldo Get Return _saldo End Gf End Property 4, Sobrescrevendo o método ToString() Vamos também sobrescrever 0 método ToString)), que retorna uma string que representa o objeto atual. Esse método é um método do NET Framework ¢ como cada classe no VB .NET herda de Object, cada objeto no VB .NET contém 0 método ToString). Podemos sobrescrever 0 método para criar uma mensagem personalizada, que desejamos usar em nossa classe. E isso que fizemos a seguir, sobrescrevendo 0 método ToString() da classe Object: Public Overrides Function Tostring() As string Return. String.Format("saido da Conta de Poupanca = {@,6:C)", _salde End Function E assim temos 0 cédigo completo da classe ContaPoupanca, que implementa os métodos ¢ propriedades da interface IConta’ 1 Public Class ContaPoupanca 2|"~” Implenents. conta 5| Private’ saldo As Decimal 4 | private Dlimitediario Az Decimal 5 &| Public Function Depositar(valor As Decimal) As Boolean Inplenents IC 7 ‘saldo t= valor 8 Zonsole.wiriteLine(string.Format(*Deposito realizado com sucesso ae} end Function i 32] Public Function Sacar(valor As Decinal) As Boolean Inplenents IConta a Tf Lsaldo « valor then i ‘Console.WriteLine("saldo insuficiente.") Fa Return False 16 ElseIf isiteblario + valor > 1080 then v Condole.uritetine("Valon superior 30 Limite disrio!”) ae Return False i ese 20 “_saldo =~ valor 2 Tlimitediario += valor 22 Tonsole.WriteLine(string.Foraat("saque realizado con sucesso be end IF 35| end Function 26 27| public Readonly Property Saldo As Decimal Inplenents Iconta.Saldo 28 Get 2 Return _saldo 3 End Get htpsimastrs.com bridesenvohimentalvisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pate-O8trace= 1519021197&scurce=single 8/15, ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - a2] End Property 32 33] public overrides Function, Tostring() As String 34 Return string.Fornat("Saldo da Conta de Poupanca = {@,6:C)", Sale 35| End Function EA 37 | end class Criando a classe ContaCorrente e implementando a interface Conta Vamos agora criar a classe concreta ContaCorrente No menu PROJECT clique em Add Class. Selecione o template Class informe o nome ContaCorrente.vb ¢ clique em Add. A seguir, digite logo abaixo da declaragao da classe a palavra Implements e a seguir a interface IConta. Ao teclar ENTER, o Visual Studio ird criar automaticamente os métodos @ propriedades da interface que devemos implementar conforme mostra a figura abaixo: (Genera) [Dect wie «Le 4) unite Function oeposttar(ater As oecnal) As Boolean Ieplonents Corts Depsttar 4. ovstse Function Sncar(vator&s GecSnal) & fosteey Inplenents ICont. Swear 4 ovoise Readony Property Sele Se Decinal Iplenents Inte. Saldo sud. nd Property Nesta classe vamos definir apenas uma varidvel privada, visto que néo teremos valor para limite didrio de saque © _saldo — armazena o valor do saldo da conta Private _saldo As Decimal 1. Implementando o método Depositar Vamos implementar o método Depositar conforme 0 cédigo abaixo: htpsimastrs.com bridesenvohimentavisual_studofrogramacao-crientada-cbjetes-em-10icoes-praticas-pale-08"trace= 1519021197&scurce=single 15, ‘ori062016 htp:imastrs.com bridesenvolvimertalvisual_studofrogramacao-crlentada-chjetos-em-10-icoes-praticas-parte-08 trace: Programagdo Orientada a Objtos om 10 ies prticas -Parto 05 - Public Funetion Depositar(valor As Decinal) As Boolean Inplenents IConta ‘aldo += valor “Console. uritel ine(String.Format("Deposito realizado com sucesso Return True End Function © método Depositar da ContaCorrente, da mesma forma aue a classe ContaPoupanca, ira incrementar o valor do saldo da conta pelo valor do depésito e retornar um valor igual a True e uma mensagem de depésito feito com sucesso. 2. Implementando o método Sacar No método Sacar, tomos que verificar apenas se existe saldo na conta, Se houver, iremos exibir uma mensagem de saque realizado com sucesso; caso contrario, iremos exibir saldo insuficiente. A seguir, temos a implementagéio do método Sacar) para a classe ContaPoupanca: Public Function Sacar(valor As Decimal) As Soolean Inplenents IConta.Sact If -saldo ¢ valor Then Console.WriteLine("saldo insuficiente.") Return False Else “sade -= valor Tonsole.Writet ine(string.Foreat("Saque realizado con sucesso end IF End Function 3. Implementando a propriedade Saldo A seguir temos 0 cédigo da implementacao da propriedade Saldo, que é idéntico ao da classe ContaPoupanca: 1| Public Readonly Property Saldo As Decimal Inplenents IConta.Saldo 2 Get 3 Return _saldo 4 End Gil S| nd Property 4. Sobrescrevendo o método ToString() Nesta classe também vamos sobrescrever o método ToString() igual a classe ContaPoupanca, apenas alterando a mensagem: 1] Public overrides Function ToString() As String 2 Return [String].Format("saldo da Conta Corrente = (0,5:C}", _saldo: 3 | end Function ro0zt97escurce=single 106 ‘ori062016 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - E assim temos 0 cédigo complete da classe ContaCorrente, que implementa os métodos e propriedades da interface IConta: 3 | Public Class ContaCorrente 2] Inplenents.Tconta 3| Private’ saldo As Decimal 4| Public Fanction Depositar(valor As Decimal) As Boolean Implements I¢« 5 “Saldo.#= valor 6 Console. writel ine(string.Format("Deposito realizado con sucesso &| end Function 5| Public Funetion Sacar(valor As Decimal) As Boolean Inplenents Iconta w Tf Lsaldo < valor Then hi Console.WriteLine("Saldo insuficiente.") 2 Return False % Fise 18 “sade -= valor 6 Tonsole.uritet ine(string-Format("Saque realizado con sucesso ie Return True D end If ie| end Function 15] Public Readonly Property Saldo As Decimal Inplenents Tconta.Saldo 20 ee 2 Return _salé0 2 End Get 35] end Property 24| public Overrides Function ToString() As String 25 Return string.Foraat("Saldo da Conta Corrente = (@,6:C)", Saldo) 26] end Function 27 | end Class Testando as classes no projeto Console Application Vamos agora testar a utilzago da interface e das classes criadas no projeto em uma aplicagao Console Application. Vamos criar uma instancia da classe ContaPoupanea e da classe ContaCorrente e realizar algumas operagées de saque e deposito. O eédigo devera ser incluido no arquivo Modulet.vb conforme abaixo: 2] estates 4 Dim contaPoupanca_Macoratti As IConta = New ContaPoupanca() é onsoecarsvetinetsestondo corey de pouroneyes 8 bens) ; eepbinan autora: apes ea eas) a Console.WriteLine(contaPoupanca_Macoratti.ToString()) a eOSIS Aeaey0) 2g oestSereats uesrnt epee tear eas) B conbeserents hacerdett sostine) a9 Console.writeline(contaCorrente Macoratti.ToString()) 8 Soest Renae 22 | end madule htpsimastrs.com bridesenvohimertavisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pale-08trace= 1519021197&scurce=singlo 1/16, ovoaz0%6 htp:imastrs.com bridesenvolvimentalvsual_stulprogramacao-crentada-chetos-om-10-icoes-praticas- parte 08 race Programagie Orintada a Objetos om 10igdas réicas- Parte 05 - Executando 0 projeto, iremos obter o seguinte resultado (abaixo very exemplos de execugao para Poupanca e ContaCorrent} 2 ics TRG Vimos itar seus métodos mo podemos criar uma in em classes concretas. momento, vooé pode estar com as seguintes dividas: Quando vooé deve usar uma classe abstrata ? © Quando vocé deve usar uma Interface ? © Quando vocé deve usar as duas ? A seguir, um pequeno roteiro para ajudé-lo a tomar a melhor decisao. NEWSLETTER O que é uma classe abstrata ? Suponha que vamos criar varias classes que tém mét, [swe outros métodos funcionam aiferente para cada classe fazer isso 6 usar as classes abstratas As cla abstratas tém pelo menos um método abstrato, ou método que nao em corpo; © Se um métode tem uma classe abstrata ele deve ser declarado como um método abstrato; © Nao podem ser criadas instancias de classes abstratas; Ao criar uma classe usando uma classe abstrata como heranga, devem ser criados os corpos para os métodos abstratos; © Para criar uma classe usando uma classe abstrata como heranga basta usar a palavra-chave inherits, como em uma classe normal: IS1902T197Ascurcersingle 1216 Programagdo Orientada a Objtos om 10 lies prticas -Parto 05 - © Um método abstrato é identificado pelo modificador - MustOverride, a classe que possui este modificador ndo pode ser instanciada através da palavra chave New, Vamos a um exemple: O que sao Interfaces ? Interfaces podem ser entendidas como um tipo de classe abstrata em que todos métodes sao abstratos. © Em uma interlace nenhum método tem corpo @ sao implicitamente abstratas e puiblicas; © Assim como uma classe abstrata, uma interface ndo pode ser instanciada; © Uma classe pode implementar mais de uma interface: © Uma interface nao pode conter um construtor; © Ao criar uma classe usando uma interface, devem ser feitos os corpos de todos os métodos da interface, caso contrario deverd ser criada uma classe abstrata; © Para implementar uma interface no VB.NET usamos 0 modificador — Implements. Com os conesitos bem definides vamos tentar uma tabela de consulta rapido para tomada de decis6es: Interfaces x Caracteristica omosenetende htpsimastrs.com bridesenvolvimertalvisual_studofrogramacao-crentada-chjetos-em-10-coes-praticas-parte-08 race: Classes Abstratas Interface tipo ee eb, mute menos citgo a implementacd de uma Se toca a8 siverans implementa Classe Abstrata ago compieta,celgo padre outer apenas cecaraae de sev esueieto Sone virias mplomentasses 80 test ro0zt97escurce=single 1916 ‘ori062016 Programagdo Orientada a Objtos om 10 li prticas -Parto 05 - compara a asinatra do métoso do tpae campartiam um arent Seo cielo do seu dente conversa ocd pode taciment altrar a Vetoccade Lert, requer trabalho extra para ——_—Ripiéo uma lntertace sho presuniamente em uma class astat, Voce pode usar abiias ou oniticas go para computar 0 alr inital Interface vot precisa aurtar toe as uma clase absrata oct tem a opcto Voce decide! Pegue 0 projeto completo aqui: OOP_Interface.zip Na préxima aula irei abordar os conceitos sobre polimorfismo ¢ sua implementagao e utilizagao na inguagem Visual Basic. Joab Carlos Macoratt rs NET, aval So Sent-ora, 22 de agosto de 2044 de | 0% O in htp:imastrs.com bridesenvohimentalvisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pate-08"trace= 1519021197&scurce=single 14/15 ovoaz0%6 Programagéeo Orientada a Objetos om 10 ligdes préicas - Part lela agora Programagao Orientada a Objetos em 10 ligdes praticas - Parte 07 @ dost caro Macrat Buccooe i ewe nea he sewn eee os © Dé Sua Opiniao (© sou endorago de e-mail serdpublcade. Campos obrigaéries s8o marcados com” Nome Este proto 6 mantis parca plas empress sere BW... toto «= CeO embate? «= FIA maracta (Dom WUQU——gydncy Se mil vw @ ee a ae Hespecade por Bg riation Desenvolvimento Design Banco de cados Mearsoting iota Agenda cursos Online aie 8s max nero Cconteudo Digital rum Intoscon ax Acoesidade Mongo08 E-commer ‘Andee de Dados gute de wMysat Ema Ma Testers Revista Masters oss asin Responsive Postgrosau, Pubtecade Online Front End Games SQL Server Redes Sociale htpsimastrs.com bridesenvahimertalvisual_studofrogramacao-crientada-chjetos-em-10icoes-praticas-pate-08trace= 1519021197&scurce=single 18/16,

Você também pode gostar