Você está na página 1de 15
ovoaz0%6 Programagie Orintada a Objetos om 10 igdas préicas- Parte 03 - @- /DESENVOLVIMENTO Bow Bescon Leino lator ® Programagao Orientada a Objetos em 10 ligdes praticas — Parte 03 wes / Na primeira parte deste artigo apresentel os conceitos chaves da (a1) (A+) orientagdo a objetos na linguagem VB .NET, ¢ agora vamos mostrar como criar uma aplicagéo VB .NET aplicando os conceitos abordados. Ligao 10 - Juntando todas as partes Embora o VB .NET seja realmente uma linguagem orientada a objetos, vooé pode usar a linguagem da mesma forma que usa uma linguagem estruturada como Visual Basic ou Pascal. Se vooé nao incorporar os conceitos da orientacdo a objetos e aplicé-los em seus projetos, construiré aplicagdes usando os mesmos conceitos das linguagens estruturadas. Isso no 6 de todo ruim, mas vocé acaba n&o usando os recursos da linguagem e continua a construir projetos usando 0 paradigma procedural E como se vooé tivesse uma Ferrari, mas se comportasse como se tivesse um fusca. © segredo para incorporar os conceitos da orientagéo a objetos em suas aplicagées é conhecer bem os conceitos e praticar. Entéo vamos Id, htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single wi ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - Os exemplos mostrados aqui foram construidos com base nos exemplos do livro OOP with Microsoft Visual Basic NET and Microsoft Visual C# Step by Step, Criando sua primeira aplicagao orientada a objetos com VB .NET Nesta primeira aplicagao vooé vai aprender a: © Decidir quais classes implementar em seu programa; © Criar classes com campos, propriedades e métodos; Usar classes em uma aplicagéo Windows Forms; © Usar 0 Visual Studio 2012 Express for desktop para criar classes; Criar uma aplicagdo Windows Forms e usar classes nesta aplicagéo; © Aprender como interagir com controles de formulério. © objetivo é criar uma aplicagéo Windows Forms que exiba textos em tamanhos de paginas especificos. Recursos usados: Visual Studio 2012 Express for Windows desktop Nota: Neste momento ja se encontra disponivel a versao 2013, E importante salientar que a ferramenta usada é gratuita e néo possui restrigdes, sendo totalmente funcional. Ao fazer o download da ferramenta, vocé também pode baixar o pacote de idioma para localizar 0 produto para a lingua portuguesa. 1. Problema: Vooé possui baixado no seu computador diversos livros deseja selecionar um livro ¢ ler uma pagina particular, podendo definir © tamanho desta pagina 2. Interface: A interface da aplicagao foi criada no Visual Studio 2012 Exoress for desktop ¢ utiliza os controles ListBox, RichTextBox, Labels, NumericUpDown, Construindo a interface Abra o Visual Studio 2012 Express for desktop e clique em New Project. Selecione o template: Visual Basic -> Windows -> Windows Forms Application, Informe o nome LeitorVBNET e clique no botdo OK: htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single amr ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - encheaTogne On B+ C1 oni Oe se Qegine vase peer ereetsenctee LL] wrens re By cote BD corre on i Saar dD A seguir, vamos inoluir os seguintes controles no formulério form vb: © Label © ListBox — name=lbLivros: © RichtTextBox - name=rehtPagina « NumericUpDown ~ name=nupd_TamanhoPagina © NumericUpDown ~ name=nupd_PaginaExibir O leiaute do formulirio é visto abaixo: Criar a interface usando o Visual Studio 2012 Express for desktop & bem simples, mas agora nossa preocupagdo é saber: © Como armazenar 0s textos dos livros? htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single ar ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - © Como preencher a lista? © Como retornar a pagina correta do livro que desejamos ler? Para responder essas perguntas, vamos usar os conceitos da programagao orientada a objetos. Definindo as classes Antes que vocé possa implementar suas classes, vocé deve decidir quais as classes que vooé precisa. Primeiro vocé deve olhar para os objetos do problema. ‘Tendo encontrado os abjetes, entéo vocé olha para as propriedades, que so caracteris ticas ou qualidades que pertencem ao objeto e os métodos, gue sdo os comportamentos do objeto. \Vooé pode escolher entre muitas maneiras de projetar as classes em um aplicativo, A abordagem aqui apresentada comega com uma analise textual do problema. Os substantivos so selecionados como candidatos as classes, enquanto os verbos se tornam candidatos aos métodos, No curso da andlise, vocé vai eliminar muitos dos substantivos como candidatos, vocé pode descobrir classes que nao esto entre os substantivos na especificagao. Depois de determinar os objetos, propriedades e métodos que pertencem a suas classes, vocé pode escrever a especificacao da classe que voc val usar na implementagao. Encontrando as classes 1. londo 0 texto do problema e identificando todos os substantivos: Voce possui baixado no seu computador o texto de diversos livros e deseja selecionar um Ivro @ ler uma pagina particular por vez podendo definir 0 tamanho desta pagina. Podemos eliminar computador, texto, tamanho e pagina pois sao irrelevantes para o problema, néo podendo gerar comportamento para qualificar uma classe. htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single an ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - Ficamos entao com livro e © seu plural livros, que podem representar classes potenciais para expressar 0 dominio do nosso problema, Nosso problema deverd tratar com livro, onde um livro contém um titulo & um texto que pode set lido, e livros, onde livros representa uma colegio de livros e que por isso vamos chamar de Livraria. Definimos, portanto, duas classes no problema: Livro e Livraria. Encontrando propriedades e métodos 2, lendo 0 texto do problema e identificando todos os verbos: \Vocé possui baixado no seu computador 0 texto de diversos livros deseja selecionar um lvro e ler uma pagina particular por vez podendo definir o tamanho desta pagina. Considerando cada verbo devemos verificar se ele 6 um método ou pode indicar um método e se é relevante para o problema. Assim temos: © Selecionar pode ser considerado uma operacao da classe Livraria, onde devemos selecionar um livro dentre os livros existentes, marcando para leitura. Vamos definir este método como Selecionarlivro. © Ler 6 operagao da classe Livro, Este método permitira ler uma pagina particular e portanto vamos chamé-lo de getPagina. © Adicionar - Devemos poder incluir livros na Livraria, Portanto, o métedo Adicionar seria responsdvel por essa operagao. Vamos chamar 0 método de AdiconarLivro. Propriedades da classe Livro: © Texto © Tamanho da pagina- TamanhoPagina © Titulo Vamos, entéo, verificar s@ estamos no caminho certo, Podemos armazenar ¢ organizar diversos livros ? Sim, podemos criar um Livro @ armazenar cada livro formando um Livraria usando o métedo AdicionarLivro. htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single si7 ‘ori062016 rogramazéo Orientada a Objetes em 10ligSes préticas- Part 03 - Podemos selecionar um ivro e ler uma pagina do livro por vez ? Sim, podemos selecionar um livro pelo titulo usando 0 método Selecionarl ivro © usar 0 método getPagina para retornar uma pagina. Podemos definir o tamanho da pagina? Sim, podemos usar a propriedade ‘TamanhoPagina para definir o tamanho da pagina. Percebemos que estamos indo na diregao certa. Vamos relacionar os métodos e propriedades das nossas classes: Classe Propriedades Métodos Livro TamanhoPagina- > GetPagina( numeroPagina as integer) Integer as String Texto - String Titulo - String Livraria ° SelecionarLivro(titulo as string) as Livro ° AdicionarLivro(aLivro as Livro) Criando a classe Livro No menu PROJECT, clique em Add Class. Selecione o template Class informe o nome Livro.vb e clique em Add: seen dete htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single av ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - A seguir, vamos definir na classe Livro 0 seguinte cédigo’ 1) Public Class Livee 3| 2. - construtor 4] sue new) 5| End Sub 2) °2- canpos 8) — Pubide Texto As string = * 5| Public TananhoPagina As Integer = 10 a1] °3 ~ propriedade 12] Public Property Titulo As string a ia] -4 - metodo 15] Pubic Function GetPagina(By¥al_nuneroPagina As Integer) As string 16 Dim inicio as Integer = (numeroPagina ~ 1) * TasanhoPagina v Tf (inicio < Texto.Length) And (inicio >= 8) Then ib If (inicio + TananhoPagina) < Texto. Length Then i Return Texto.Substring(inicio, TanannoPagina) Fa ese 2 Return Texto.Substring(inicio, Texto.Length - inicia) 2 ena If 3 else 24 Return“ 2 end TF 26] end Function 28| end class Vamos entender o cédigo: O modificador Public na classe Livro: Public Class Livro, indica que a classe poderd ser usada ¢ acessada em todo o projeto. A classe Livro possui um construtor padrao vazio definido como: 1 | Sub New) End Sub Geralmente, 0 construtor contém cédigo para inicializar os campos das classes e realizar outras operagées de inicializagao. Ele seré executado toda vez que a classe for instanciada com o operador new. Nao é obrigatério definir um construtor. Em nosso exemplo eu apenas declarei o construtor para mostrar como é a sintaxe da declaragéio no VB NET Definimos os campos (fields) Texto e TamanhoPagina como sendo do tipo String e Integer e atribuindo valores iniciais aos mesmos: blic Texto As String = “> jubLie TananhoPagina AS Integer = 10 htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single m7 ‘ori062016 rogramazéo Orientada a Objetes em 10ligSes préticas- Part 03 - Um campo é uma variavel declarada na classe ¢ pode ser de qualquer tipo de dados da plataforma NET Se nao tivéssemos atribuido valores iniciais acs campos, os valores default seriam atribuidos pelo compilador. Para campos do tipo String, um valor "" seria atribuido e para campos Integer, seria atribuido o valor zero Os campos utllizam o modificar Public, significando que podem ser acessados sem restrigdo. © acesso direto aos dados de uma classe é uma violagao de um principio basico da orientacdo a objeto: o encapsulamento da informagao. Por isso definimos propriedades para acessar os campos, sendo que eles declarados com Private e as propriedades como Public A propriedade Titulo foi definida usando a nova sintaxe das propriedades auto implementadas: Public Property Titulo As String. Asintaxe antiga, usada pelo VB.NET, usava as declaragdes get /set nas propriedades - onde get obtinha o valor ¢ set atribufa valores. Abaixo vemos como ficaria a propriedade Titulo na sintaxe antiga’ 1| private m_titulo as string 2| Public property Titulo() As String 3) cet 4 Retuen m_titule 5| End Get 6 ‘Set(Byval_ value as string) 7 titulo = value 8) end Set 5 | ena’ Property Uma propriedade permite obter e atribuir valores a um campo privado da classe, A diferenga entre propriedade e campo é que pa ra os campos 6 reservado um valor na memiéria, pois eles contém dados. As propriedades 86 permitem 0 acesso aos campos e nao possuem dados. As propriedades podem ser Public, Private, somente-leitura (ready-only),, somente-escrita (write-only) @ podem ser usadas para validar dados da htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single a ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - classe e esconder sua implementagao, Podemos visualizar a estrutura da classe usando a opgao Class View no menu VIEW: canes sax aloo a seo» -2 2 Leone 2 ff Reterence 20) Lesnar » fe Fomt 4 i toMy 9 Ned 6 Gatagratiee te ing 1 Tle ds Seng 2 ins Sclutontglere Clas View Criando a classe Livraria No menu PROJECT clique em Add Class; Selecione o template Class ¢ informe o nome Livraria.vb e clique em Add. SeehiaatesTenuinteaee) © ty commenters cen WRP) Corman 200 NET enon. Carmonene onetnnintentie Comment A seguir, defina 0 cédigo abaixo na classe Livraria: Public Class Liveania Private prateleira As New SortedList() ‘csusmary> AdiesonarLiveo ‘novel ivro"> htpsimastrs.com bridesenvohimentlprogramacao-orertads-cjslos-om-10icoes-pratcas-parte 09"Arace= 15190211978sourco=single a7 ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - 10] Public sub AdicionarLivro(syval noveLivro As Livro) i prateleira.Add(novoLiveo. Titulo, noveLivro) 12] end Sub aa] 1" esumary> is Selecionartivro is ‘ D Sparan nane="titulo"> 1B 1 Greturass Ft * resarks> 20] Public Function SelecionarLivro(Byval titulo As String) as Livro 2 Din Tivee as Livro. 22 “livfo = Crype(prateleira(titule), Livro) 3 Brateleira.Renove(tstulo) 26 Return -ivre 25| end Function 26 27 | end class Entendendo 0 cédigo: Definimos a varidvel prateleira como uma instancia da classe SortedList : Private prateleira As New SortedList() Acclasse SortedList 6 uma classe do NET Framework existente no namespace System.Collections e representa uma colegao de pares chave/valor que so ordenados pelas chaves e so acessiveis por chave @ por indice. Um elemento SortedList pode ser acessado por sua chave, como um element em qualquer implementagao de |Dictionary, ou por seu indice, como qualquer elemento em uma implementagao de [List Operagées em um SortedList objeto tendem a ser mais lenta do que as operagdes em um Hashtable 0 objeto por causa da classificagéio. No entanto, 0 SortedList oferece mais flexibilidade, permitindo o acesso aos valores por meio das chaves associadas ou os indices. Vamos usar a instancia da classe SortedList para armazenar @ selecionar livros (dai seu nome prateleira), sendo que os livros adicionados seréo ordenados automaticamente, Como definimos a variével prateleira como Private, seu acesso sera restrito ao escopo da classe. No método AdicionarLivro(byval novoLivro as Livro}, usamos 0 método ‘Add do objeto prateleira para incluir um novo livro na colegao. Note que htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single so ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - precisamos informar 0 titulo do livro (chave) ¢ um objeto do tipo Livro (valor) No método SelecionarLivro(byval titulo as String) definimos um objeto _livro do tipo Livro e estamos localizando o livro pelo titulo na prateleira, realzando uma conversao forgada (casting) para o tipo Livro: CType(prateleirattitulo), Livro) ‘Apés selecionar o livro, usamos o método Remove do objeto pri para remover o livro da mesma e retornamos a livro: Return _lvro. Dessa forma, nossa classe Livraria esta pronta para ser usada. Definindo 0 cddigo do formulario ‘Agora podemos retornar ao formulério da aplicagao e utilizar os eventos dos controles do formulério para definir as ages que desejamos controlar em nossa aplicagdo usando as classes definidas e interagindo com 0 usuario. E através do formulario, seus controles ¢ eventos que 0 usuario poder interagir com a aplicagao e usar os recursos implementados em nossas classes. Se vocé visualizar 0 cédigo de um formulério, vai perceber que ele é uma classe. No nosso exemplo note a declaragao Public Class Formt explicitando a definigao do formulério Form1 1] Public Class Form 2| end class Dessa forma, 0s formulérios que usamos em qualquer projeto VB NET so classes ¢ possui diversos m todos e eventos, alguns dos quais iremos usar em nossa aplicagao. Vamos iniciar definindo uma varidvel do tipo Livraria no inicio da classe Formt htpsimastrs.com bridesenvohimentlprogramacao-orertads-cjolos-om-10icoes-pratcas-parte02"Arace= 15190211978sourco=single wT ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - i | Private _Livrania As Livearta Isso € necessério para que ela seja visivel em todo 0 formulério. Como definimos a variével como Private, ela somente serd visivel neste formulario, Agora vamos usar 0 evento Load do formulrio, que ocorre quando ele & carregado pela primeira vez, definindo o seguinte cédigo neste evento: 1] Private sub Formt_Load(sender As Object, © As EventArgs) Handles MyBase.l 2 |” “carregapados(} 3 | ena Su Dessa forma, toda vez que esse formulario for aberto, o evento Load sera chamado e a rotina CarregaDados() sera executada, Na rotina CarregaDados() vamos criar uma instancia da Livraria e criar dois objetos da classe Livro, adicionando-os na Livraria, Para isso, digite 0 cédigo abaixo na rotina CarregaDados: Private Sub Carregadados() _Hivearia = New Civraria() a Din _receitas As New Livro() 5 Treceitas.Texto = "Bolo de chocolate com cobertura de norango é ui & Treceitas:TananhoPagina = 8 7 Trecestas Titulo = “Receitas* 8 3 Dim _contos As New Livro() Fd “confos.Texto = "Era uma vez nos tenpos dos cavalheiros e das cru: a Teontos TananhoPagina = 8 2 Teontos Titulo = "Res Artur” Fel ie _livrania.AdicionarLiveo(_receitas) Fa “livraria Adicionartiveo(=contos) Fa IbLivros. Itens.add(_receitas. Titulo) ie IbLivros. Itens.aad(_eantos. Titulo) i 20| end sub Criamos uma insténcia da classe Livraria : livraria para podemos adicionar os livros. A seguir, criamos duas insténcias da classe Livro : _receitas e _contos & atribui valores as suas propriedades Texto, TamanhoPagina e Titulo. Usando 0 método AdicionarLivrod, incluimos 0s livfOS) Jewel etter htpsimastrs.com bridesenvolvimertalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte02"Arace= 15190211978source=single var ‘ori062016 Programagéo Oriertad a Objtos em 10igdesprética - Parte 03 - exibir os valores do dos titulos dos livros no controle | “""*™™* usamos o método Add do controle. Esta faltando exit no controle RichTextBox. Para isso, 0 usuério deveré exibido no controle ListBox e sua pagina sera exibida: RichTextBox, Vamos usar 0 evento SelectedindexChanged do controle ListBox Esse evento ocorre quando houver qualquer mudanga na propriedade Selectedindex do controle. Quando um usuério seleciona um item no ListBox essa propriedade muda de valor e 0 evento é disparado. Para abrir 0 cédigo do evento no formulério basta clicar duas vezes sobre © controle ou na janela de propriedades clicar no icone para exibir as propriedades e clicar duas vezes sobre a propriedade SelectedindexChanged: eB) alg) « noe th * ae remein Seaceucy Georg orcas iver Suceanks] Inclua 0 o6dige abaixo neste evento: 1] Private Sub IbLivros_SelectedTndexchanged(sender As Object, ¢ As EventAr| 5 | pim titulo as string = loLivros.Selectedrtes.tostring() | Dim “Livro as Livro» “livearda,SelecionarLivra(, titulo) 6 | _Aivre.TamanhoPagina = nupé_TasanhoPagina. Value 7 8) AbiTituloLivee.text = livre. Titulo 10] rehePagina.Text = _Livro.GetPagina(nupd_Paginatxibir. value) 12] _Aivrarda.adieionarLivro(_livra) a 1a | end sub htpsimastrs.com bridesenvohimentlprogramacao-orertads-cjslos-om-10icoes-pratcas-parte 09"Arace= 15190211978sourco=single vai ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - Entendendo 0 oédigo: Obtemas 0 titulo do livro selecionando no controle ListBox usando 0 método Selecteditem do controle e usamos 0 método ToString)) para converter 0 valor para String : Dim titulo As String = IbLivros.Selecteditem.ToString) e atribuimos o valor a variavel titulo do tipo String (String ¢ um tipo de dados onde armazenamos valores alfanuméricos) Procuramos o livro na livraria usando o método SelecionarLivro & passando 0 titulo do livro: Dim _livro As Livro = _livraria.Selecionar ivro(_titulo), © valor retornado 6 um livro que serd armazenado no objeto _livro A seguir, atribuimos o valor definido no controle NumericUpDown, nupd_TamanhoPagina : _livro.TamanhoPagina nupd_TamanhoPagina.Value Obtendo o tamanho da pagina ‘Atribuimos 0 valor do titulo do livro & Label IbITituloLivro, Obtemos a pagina usando 0 método GetPagina() e passando 0 valor definido no controle nupd_PaginaExibir para pagina a exibir: Adicionamos o livro na livraria: _lvraria AdicionarLivro(_livro) Abaixo vemos 0 eédigo completo do formulario Form 2 | Public Class Form 2 5] private tiveania as Livrania S| private Sub Foret_Load(sender As object, e As EventArgs) Handles Mya é Carregavados() 2) end Sub &| Private sub Carregabados() 5 “Tiveaeia = New Livraria() n Din receitas As New Livro() 2 Precaitas.Texto = "Bolo de chocolate con cabertura de morango € | a Treceitas:TanarhoPagina = 8 Ma Treceitas.Titulo = "Recetas" is a6 Dim _contos As New Livro() v ~contos.Texto = "Era una vez nos tenpos dos cavalheiros e das cr i x fananhoPagina = 8 eeRed Artur” htpsimastrs.com bridesenvohimentlprogramacao-orertads-cjslos-om-10icoes-pratcas-parte 09"Arace= 15190211978sourco=single wir ‘ori062016 Programaglo Orientada a Objtos om 10 lies prticas -Parto 03 - a _livraria.AdicionarLiveo(_receitas) 2 “iivrania ‘AdicionarLiveo(=contos) 2 24 Livros. Ttens.Add(_receitas. Titulo) 25 Livros. tens Add(—contos. Titulo) Fa 27| end sub 2 25| Private Sub IbLivros_selectedindexchanged(sender As Object, © AS Ever 30 3 Dim titulo As string = IbLivros.Selectedrten.Tostring() 32 Dim “liveo As Livro’ = _livraria.Selecionarlivee(_itulo) 33 3 _livro.TananhoPagina = nupd_TananhoPagina.Value 35 36 AbiTituloLivre.Text = Livre. Titule 7 38 echtPagina.Text = _Liveo.GetPagina(nupd_Paginaéxibir. Value) 33 48 _Hivrania.AdicionarLiveo(_tivro) a 42] end sub 43 | end Class ET , Executando 0 projeto e selecionando um titulo, vemos o resultado a seguir: Pegue o projeto completo aqui: LeitorVBNET.zip Na préxima aula irei mostrar como podemos usar heranga e criar classes especializadas, ronan pte: Joa Carlos Macoratt ern NET, Desenvokimento tergafora, 12 do agosto de 2018 won / 0% in htpsimastrs.com bridesenvolvimentalprogramacao-orertads-cjelos-om-10icoes-pratcas-parte 02"Arace= 15190211978source=single 1817

Você também pode gostar