Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 AULA 1: INTRODUÇÃO PLATAFORMA .NET FRAMEWORK 4.0 A plataforma .NET Framework 4.0 (.NET 4.0) é uma plataforma de softwares que fornece integração com um conjunto variado de linguagens de programação, produtividade em desenvolvimento de aplicações, implantação e execução de aplicações em um ambiente gerenciado (MSDN, 2010). O .NET 4.0 é também definido como tecnologia porque é composto de bibliotecas e ferramentas executáveis integradas com o sistema operacional como, por exemplo, o vbc.exe que é o compilador do Visual Basic (VB). ARQUITETURA DO .NET 4.0 O .NET 4.0 é uma camada de softwares que fica entre o sistema operacional e as aplicações. Esta camada é subdividida em duas camadas, conforme mostra a figura 2.1. A camada inferior, chamada de Common Language Runtime (CLR), executa a maior parte das tarefas e a camada superior, chamada de Base Class Library (BCL), contém os tipos, as interfaces e as bibliotecas de classes como, por exemplo, Windows Forms, Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), ASP.NET, ADO.NET, Windows Workflow Foundation, LINQ, Parallel FX etc., utilizadas para a criação de uma aplicação (DEL SOLE, 2010). APPLICATIONS Core Windows Forms WPF ASP.NET ADO.NET LINQ Parallel FX WCF Workflow Foundation Base Class Library Common Language Runtime Windows Operating System Desta forma, um dos grandes benefícios proporcionados pelo .NET 4.0 é o aumento da produtividade no desenvolvimento de software, uma vez que o .NET 4.0 fornece muitas das classes geralmente necessárias para o desenvolvimento de uma aplicação, dispensando o esforço e o consumo de tempo para que estas sejam codificadas pelo programador da aplicação. O .NET 4.0 é standalone, ou seja, todo o CLR e toda a BCL estão contidos na versão da plataforma e, desta forma, não necessita que as versões anteriores estejam instaladas. Esta é uma grande diferença em relação às versões anteriores do .NET, que eram plataformas incrementais que necessitavam das versões prévias instaladas como, por exemplo, o .NET 3.5 que contém o LINQ, o .NET 3.0 porque este contém o WPF e também o .NET 2.0 que contém o Windows Forms (DEL SOLE, 2010). 2 O Common Language Runtime (CLR) provê uma camada comum a todas as linguagens .NET. O CLR permite que a aplicação seja executada em um ambiente gerenciado onde a aplicação se comunica com o .NET, ao invés de se comunicar diretamente com o sistema operacional. Desta forma, o CLR é responsável pelo controle da execução das aplicações, pelo gerenciamento da memória, pelo gerenciamento dos recursos, pelo acesso aos recursos do sistema, pelos serviços de segurança etc. O código da aplicação escrito em alguma linguagem .NET para este ambiente gerenciado é conhecido como managed code (código gerenciado) (DEL SOLE, 2010). A Base Class Library (BCL) fornece milhares de tipos, interfaces e classes para serem utilizados nas aplicações. Os namespaces são pacotes ou contêineres que agrupam os tipos, as interfaces e as classes relacionadas a uma tecnologia como, por exemplo, o namespace System.Windows.Forms para Windows Forms e o namespace System.Web para aplicações para web. A BCL é composta de diversos assemblies. Um dos mais importantes é o MsCorlib.dll (Microsoft Core Library). Alguns são para tecnologias especificas como, por exemplo, o System.ServiceModel.dll que integra a BCL ao Windows Communication Foundation (WCF). Common Language Runtime Os compiladores das linguagens .NET, ao compilarem os códigos das aplicações, geram pacotes chamados de .NET assemblies (montagens). Um .NET assembly (montagem) é um arquivo que contém códigos em Microsoft Intermediate Language (MSIL) e metadados (metadata). A MSIL é uma linguagem assembly de alto nível, orientada a objetos, com conjunto de instruções independentes de CPU. A MSIL é dita uma linguagem comum, considerando que códigos implementados em diferentes linguagens .NET, quando compilados, são convertidos em MSIL. Os metadados contêm informações sobre o código como, por exemplo, os tipos implementados, as funções, os procedimentos, as assinaturas etc. (DEL SOLE, 2010). Base Class Library .NET 4.0 .NET Assemblies Execução do Código Quando um .NET assembly é chamado, o compilador just-in-time (JIT) traduz o código em MSIL do .NET assembly para o código executável equivalente e nativo para o sistema operacional no qual o .NET assembly está instalado. O código executável nativo é chamado de jitted code. Uma outra opção, chamada prejitting, é pré-compilar o código MSIL com a ferramenta ngen.exe. Todos os assemblies do BCL são pré-compilados (prejitted) (GRIMES, 2002). INSTALAÇÃO DO .NET FRAMEWORK 4.0 Acesse a página web <http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx > para conhecer os requisitos de sistema para instalação do .NET 4.0 e faça o download do programa de instalação via web (Web installer) dotNetFx40_Full_setup.exe, execute o programa e siga as instruções para instalação. O .NET Framework é instalado em uma pasta de caminho %windir%\Microsoft.NET\Framework\4.0 ou similar, dependendo do ambiente. LINGUAGENS DE PROGRAMAÇÃO PARA .NET FRAMEWORK 4.0 A Microsoft oferece uma família de linguagens de programação para o .NET 4.0. As aplicações para .NET 4.0 podem ser desenvolvidas em linguagem Visual Basic 2010 (VB 10.0), Visual C# 4.0, Visual F# 2010 e Visual C++ 2010. Estas linguagens de programação permitem o desenvolvimento de aplicações usando ferramentas visuais disponíveis na interface gráfica para usuário (graphical user interface - GUI) do Visual Studio 2010. Além destas linguagens, podem ser utilizadas também as linguagens dinâmicas IronRuby e IronPython.] 3 A linguagem J# não faz parte da família de linguagens para .NET 4.0. EDIÇÕES DO VISUAL STUDIO 2010 O Visual Studio 2010 é um poderoso ambiente de desenvolvimento integrado (integrated development environment - IDE), com recursos novos e aprimorados que simplificam e aumentam a produtividade de desenvolvimento, desde o design (projeto) até a implantação. A Microsoft fornece várias edições do Visual Studio 2010 com diferentes recursos e preços para que o profissional de software tenha flexibilidade para escolher a edição mais adequada ao seu trabalho. As edições atualmente disponíveis são (VISUAL STUDIO, 2010): Visual Studio 2010 Professional O Visual Studio 2010 Professional é indicado para profissionais que executam tarefas básicas de desenvolvimento. Ele simplifica a criação, depuração e implantação de aplicações em várias plataformas que incluem Windows, Web SharePoint e Azure. Visual Studio 2010 Premium O Visual Studio 2010 Premium é indicado para profissionais e equipes que necessitem de teste automatizado da interface para usuário, de identificação do impacto de testes ao mudar os códigos, de geração de dados para testes e de simplificação no desenvolvimento de bancos de dados. Visual Studio Test Professional 2010 O Visual Studio Test Professional 2010 é um conjunto de ferramentas especializado para equipes de controle de qualidade, que simplifica o planejamento de testes e a execução de testes manuais. Funciona em conjunto com as outras edições do Visual Studio para desenvolvedores, permitindo a colaboração efetiva entre os desenvolvedores e os testadores durante todo o ciclo de desenvolvimento da aplicação. Visual Studio 2010 Ultimate O Visual Studio 2010 Ultimate é indicado para profissionais e equipes que necessitem de um conjunto completo de ferramentas degerenciamento de ciclo de vida da aplicação (Application Life Management - ALM). Permite a elaboração de diagramas em UML e o gerenciamento de projetos com metodologias iterativas e ágeis. Atenção: A Microsoft fornece também a edição gratuita chamada Visual Studio 2010 Express para estudantes e desenvolvedores iniciantes. O Visual Studio 2010 Express é composto do Visual Basic 2010 Express, do Visual C# 2010 Express, do Visual C++ 2010 Express e do Visual Web Developer 2010 Express. Clique aqui e saiba como Instalar o VB 2010 Express http://estacio.webaula.com.br/Cursos/gon117/docs/01DS_doc02.pdf 4 AULA 2: PROGRAMAÇÃO BÁSICA PALAVRA-CHAVE A linguagem de programação VB 2010 possui palavras-chave que são reservadas e não devem ser usadas como identificadores de variáveis, constantes, procedimentos, módulos, sub-rotinas, funções, objetos etc. Você deve evitar também algumas palavras-chave não reservadas da linguagem VB 2010 para manter a legibilidade dos seus códigos. Detalhes em https://msdn.microsoft.com/en-us/library/dd409611.aspx. COMENTÁRIOS Os comentários de códigos são utilizados para descrever o código com objetivo de documentar e facilitar o entendimento do programa. Em códigos em linguagem VB 2010 são prefixados com apóstrofe. O editor de código marca os comentários na cor verde. O compilador VB ignora todos os caracteres após a apóstrofe até o final da linha de código. O exemplo a seguir mostra um comentário de código em VB: 'Este é um comentário de código em VB' VARIÁVEL Variável é um espaço alocado na memória para armazenamento de valores. Uma variável tem um nome identificador, um endereço inicial de alocação na memória, um tamanho do espaço de alocação na memória e um tipo. CONSTANTE Constante é um espaço alocado na memória para armazenamento de um valor, que após a atribuição não pode ser alterado. Uma constante, assim como uma variável, também tem um nome identificador, um endereço inicial de alocação na memória, um tamanho do espaço de alocação na memória e um tipo. TIPOS Um tipo define os tipos de valores a serem armazenados na memória, o espaço a ser alocado na memória para armazenar valores deste tipo e a faixa de valores. Os tipos facilitam o trabalho do programador, que simplesmente declara uma variável ou constante de um determinado tipo, evitando que defina explicitamente as características de cada variável ou constante declarada no programa. Todas as linguagens de programação .NET são baseadas no Common Type System (Sistema de Tipo Comum) do .NET Framework. O Common Type System fornece tipos unificados para todas as linguagens .NET (DEL SOLE, 2010). Segundo Balena (2010), os milhares de tipos suportados pelo .NET Framework podem ser agrupados em duas amplas categorias: Tipos de valor (value types) Tipos de referência (reference types) Os tipos de valor definem variáveis ou constantes que armazenam os valores. Os valores destes tipos são armazenados em uma área de memória chamada Stack (pilha). Os tipos de valor da linguagem VB 2010 são: booleano, numéricos, Char, Date, Structure e Enum. Os tipos de referência definem variáveis ou constantes, conhecidas como ponteiros, que armazenam os endereços iniciais de memória onde estão armazenados os valores, ou seja, armazenam endereços iniciais de memória que fazem referência aos valores (apontam para os valores). Desta forma, os ponteiros são variáveis que armazenam endereços de memória. De acordo com Balena (2010), os ponteiros são armazenados na Stack, enquanto que os valores referenciados pelos ponteiros são armazenados em uma área de memória chamada Heap gerenciado. Esta área é gerenciada pelo CLR, que determina quando deve realizar o processo conhecido como coleta de lixo que libera as posições de memória ocupadas por valores que deixaram de ser referenciadas pelos ponteiros após a destruição destes. Os tipos de referência da linguagem VB 2010 são: String, arrays e classes. 5 TIPO BOOLEANO Permite definir variáveis ou constantes do tipo booleano (lógico) que podem assumir dois valores: True ou False, que representam dados que podem ter dois estados possíveis como, por exemplo, verdadeiro ou falso, ligado ou desligado, aberto ou fechado etc. O valor default, isto é, o valor padrão após a declaração da variável sem atribuição de um valor pelo programador de uma variável do tipo Boolean é False. A tabela mostra as características do tipo booleano. Tipo Tamanho Faixa de Valores Boolean Depende da Plataforma True ou False TIPOS DE NÚMEROS Tipo Tamanho Faixa de valores Byte 1 byte 0 a 255 Sbyte 1 byte -128 a 127 Short 2 bytes -32.768 a 32.767 Ushort 2 bytes 0 a 65.535 Integer 4 bytes -2.147.483.648 a 2.147.483.647 Uinteger 4 bytes 0 a 4.294.967.295 Long 8 bytes -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Ulong 8 bytes 0 a 18.446.744.073.709.551.615 Single (Float de precisão simples) 4 bytes -3.4028235E+38 a -1,401298E-45 para valores negativos 1,401298E-45 a 3,4028235E+38 para valores positivos Double (Float de precisão dupla) 8 bytes -1.79769313486231570E+308 a -4,94065645841246544E-324 para valores negativos 4,94065645841246544E-324 a 1,79769313486231570E+308 para valores positivos Decimal 16 bytes 0 a +/-79.228.162.514.264.337.593.543.950.335 (sem casa decimal) 0 a +/-7,9922816251426337593543950335 (com 28 casas decimais) Cada tipo de números inteiros permite declarar variáveis ou constantes que ocupam um determinado espaço de memória e armazenam números inteiros de uma determinada faixa de valores. O programador deve escolher o tipo que ocupe a menor quantidade de memória em bytes e seja capaz de armazenar a faixa de valores possíveis de um determinado dado a ser armazenado em uma variável ou constante. Esta abordagem permite otimizar o programa, tendo em vista que as variáveis ocupam somente os espaços de memória necessários e suficientes e consumem menos tempo e recursos, como pilha e registradores, para processamento. Por exemplo, vamos supor a necessidade de se declarar uma variável para armazenar a quantidade de filhos de uma pessoa. Neste caso, basta declarar uma variável do tipo Byte que ocupa apenas um byte e permite armazenar valores de 0 a 255. Uma variável do tipo Byte seria suficiente para armazenar a idade de uma pessoa em anos, a quantidade de dias em um mês, a quantidade de meses em um ano etc. O tipo Single define números de ponto flutuante com precisão até a sexta casa decimal. O tipo Double define números de ponto flutuante com o dobro de dígitos significativos em relação ao tipo Single ou com precisão até a décima casa decimal, que evita os erros de arredondamento que podem acontecer com números do tipo Single. Desta forma, o tipo Double é indicado para números utilizados em aplicações científicas, financeiras ou de engenharia. 6 O tipo Decimal define números inteiros de 12 bytes ou números com 0 a 28 casas decimais. O valor default das variáveis de tipos de números é zero. TIPOS DE CARACTERES Como os computadores processam números, os caracteres são codificados em números. Existem vários padrões de codificações de caracteres como, por exemplo, a codificação ASCII que representa os caracteres com 1 byte, portanto limitado a 256 caracteres. Para suportar línguas com maior quantidade de caracteres, o Consórcio Unicode promove e mantém o padrão de codificação Unicode que independe de plataforma, programa e linguagem. O padrão Unicode é adotado pelas principais empresas de TI como Apple, HP, IBM, Microsoft. Oracle, SAP, Unisys etc. (UNICODE, 2010). O tipo Char define variáveis ou constantes que armazenam o código de 2 bytes de um caracter na codificação Unicode.O valor default de uma variável do tipo Char é zero. O tipo String define um ponteiro para uma cadeia de caracteres codificados em Unicode. A cadeia de caracteres pode ter até aproximadamente 231 caracteres. O valor default do ponteiro deste tipo é Nothing, isto é, sem endereço. Tipo Tamanho Faixa de valores Char (caracter simples) 2 bytes 0 a 65.535 String (cadeira de caracteres) Depende da plataforma 0 a aproximadamente 2 bilhões de caracteres codificados em Unicode. TIPOS DIVERSOS O tipo Date define variáveis ou constantes que armazenam data, horário ou data e horário. O formato padrão é m/d/aaaa delimitado pelo caracter # como, por exemplo, #3/4/1998# que representa a data 4 de março de 1998. O valor default de uma variável ou constante deste tipo é 00:00:00 (meia noite) de 1 de janeiro de 0001. O tipo Object define um ponteiro que armazena o endereço de referência a qualquer valor ou objeto. O valor default do ponteiro deste tipo é Nothing, isto é, sem endereço. O tipo Structure permite que o programador defina estruturas com membros de diferentes tipos. Tipo Tamanho Faixa de valores Date 8 bytes 00:00:00 (meia-noite) de 1 de janeiro de 0001 a 11:59:50(PM) de 31 de dezembro de 9999. Object 4 bytes em plataformas de 32 bits. 8 bytes em plataformas de 64 bits. Valores do tipo objeto. Structure (definido pelo programador) Depende da plataforma Cada membro da estrutura tem valores definidos pelo respectivo tipo e independente dos demais membros. 7 DECLARAÇÃO DE VARIÁVEL A declaração de variável é feita através de palavra-chave reservada Dim, conforme a sintaxe: Dim Nome As Tipo Os nomes identificadores não devem começar com letra minúscula ou com underscore e não devem conter espaços ou símbolos. É usual evitar o uso de acentuação em códigos de programas de computador. O exemplo a seguir declara uma variável de nome Idade do tipo Byte e uma variável de nome Endereco do tipo String: Dim Idade As Byte Dim Endereco As String Você pode declarar, na mesma sentença, variáveis de mesmo tipo, separando os nomes por vírgula. O exemplo a seguir declara, na mesma sentença, duas variáveis de tipo Byte e de nomes Dia e Mes: Dim Dia, Mes As Byte Você pode declarar, na mesma sentença, variáveis de tipos diferentes, separando os nomes e os tipos por vírgula. O exemplo a seguir declara, na mesma sentença, uma variável de nome Numero do tipo UShort e uma variável de nome Complemento do tipo String: Dim Numero As UShort, Complemento As String ATRIBUIÇÃO DE VALOR A atribuição de um valor é feita através do sinal de igual, conforme a sintaxe a seguir: Nome = valor O exemplo a seguir atribui o valor 5 à variável Idade. Idade = 5 O exemplo a seguir atribui o literal "Av. Presidente Vargas" à variável Endereço. Endereço = "Av. Presidente Vargas" DECLARAÇÃO DE VARIÁVEL E ATRIBUIÇÃO DE VALOR A atribuição de valor a uma variável pode ser feita na mesma sentença de sua declaração, conforma a sintaxe: Dim Nome As Tipo = valor O exemplo a seguir declara uma variável de nome Dependentes do tipo Byte que atribui o valor 1 Dim Dependentes As Byte = 1 DECLARAÇÃO DE CONSTANTE E ATRIBUIÇÃO DE VALOR A declaração de uma constante é feita através da palavra-chave reservada Const e a atribuição de um valor é feita com sinal de igual, conforme a seguinte sintaxe: Const Nome As Tipo = valor A linguagem VB 2010 tem constantes predefinidas que podem ser conhecidas acessando: https://msdn.microsoft.com/en-us/library/dy7yth1w.aspx Uma constante deve ter o seu valor atribuído na sentença de declaração. O exemplo a seguir declara uma constante de nome Versao do tipo Decimal com valor igual a 1.0, e outra constante de nome PI do tipo Double com valor igual a 3.1415. Const Versao As Decimal = 1.0 Const PI As Double = 3.1415 8 CARACTERES DE TIPO LITERAL Alguns valores literais podem ser compatíveis com diferentes tipos como, por exemplo, "A" pode ser do tipo Char ou String e o valor literal 1 pode ser do tipo Byte, SByte, Short, UShort, Integer, UInteger, Long ou ULong. Os caracteres do tipo de literal (Literal Type Characters) permitem que você especifique explicitamente os tipos de literais para o compilador. Caracter Tipo Exemplo C Char "A"C D Decimal 98.2D F Single 1F I Integer 1I L Long 1L Caracter Tipo Exemplo R Double 1R S Short 1S UI Uinteger 1UI UL Ulong 1UL US UShort 1US OPERADORES BÁSICOS Os operadores básicos da linguagem VB 2010 podem ser agrupados nas seguintes categorias: Operadores Aritméticos Operador Descrição + Adição - Subtração * Multiplicação / Divisão \ Parte inteira do resultado da divisão Mod Resto do resultado da divisão ^ Eleva a potência de um valor Operadores de Concatenação Operador Descrição & Concatena duas strings + Concatena duas strings (equivale ao operador &) Operadores de Deslocamento de Bit O código a seguir apresenta exemplos do uso de operadores de deslocamento. Dim Numero As Short = 192 ' O conteúdo de Numero em bits é 0000 0000 1100 0000 Dim Res1, Res2, Res3 As Short Res1 = Numero << 0 Res2 = Numero << 4 Res3 = Numero << 17 ' O conteúdo de Res1 é 192 (0000 0000 1100 0000) ' O conteúdo de Res2 é 3072 (0000 1100 0000 0000) ' O conteúdo de Res3 é 384 (0000 0001 1000 0000) Operador Descrição << Desloca uma quantidade de bits a esquerda de um valor em bits e acrescenta zeros a esquerda >> Desloca uma quantidade de bits a direita de um valor em bits e acrescenta zeros a direita 9 Operadores de Atribuição Oper. Descrição Exemplo = Atribui um valor a uma variável ou constante X = Y += Adiciona e atribui o valor X += Y [X = X + Y] -= Subtrai e atribui o valor X -= Y [X = X - Y] *= Multiplica e atribui o valor X *= Y [X = X * Y] /= Divide e atribui o valor X /= Y [X = X / Y] \= Divide e atribui a parte inteira do resultado da divisão X \= Y [X = X \ Y] ^= Eleva a potência de um valor e atribui o resultado X ^= Y [X = X ^ Y] <<= Desloca uma quantidade de bits a esquerda de um valor em bits e acrescenta zeros a esquerda e atribui o valor X <<= Y [X = X << Y] >>= Desloca uma quantidade de bits a direita de um valor em bits e acrescenta zeros a direita e atribui o valor X >>= Y [X = X >> Y] &= Concatena e atribui o resultado X &= Y [X = X & Y] Operadores Lógicos Operador Descrição And Executa a operação AND (E) em duas expressões booleanas, binárias ou numéricas. Not Executa a operação NOT (NÃO) em duas expressões booleanas, binárias ou numéricas. Or Executa a operação OR (OU) em duas expressões booleanas, binárias ou numéricas. Xor Executa a operação XOR (Exclusive-OR) em duas expressões booleanas, binárias ou numéricas. AndAlso Executa a operação AND (E) em duas expressões booleanas, binárias ou numéricas, ignorando a avaliação da segunda expressão caso a primeira expressão seja False. OrElse Executa a operação OR (OU) em duas expressões booleanas, binárias ou numéricas. ignorando a avaliação da segunda expressão caso a primeira expressão seja True. 10 AULA 3: PROGRAMAÇÃO MODULAR MÓDULO Um módulo é um contêiner que contém membros, ou seja, declarações de variáveis, constantes e métodos (BALENA, 2006). Os módulos são delimitados pelas palavras-chave Um módulo tem um nome que o identifica. O VB 2010 Express, ao criar um projeto, define automaticamente um módulo chamado Module1 com uma sub-rotina chamada Main(), que é o método principal, conforme o código ao lado. Module Module1 SubMain() End Sub End Module MÓDULOS PREDEFINIDOS A linguagem de programação VB 2010 possui módulos predefinidos que agrupam declarações com finalidades afins para serem usadas pelo seu código. Abaixo vamos conhecer os módulos da linguagem VB 2010 (MSDN, 2010). Constants Contém diversos membros constantes que podem ser usados pelo seu código. ControlChars Contém membros constantes de controle de caracteres para impressão e apresentação de texto. Conversion Contém membros que convertem números decimais para outras bases, números para strings, strings para números e um tipo de dado para outro. DateAndTime Contém membros para obter a data e o horário corrente, realizar cálculos com datas e horários e atribuir a data ou o horário. ErrObject Contém membros para obter informações sobre erros gerados em tempo de execução, para gerar erro ou para inicializar (limpar) as propriedades do objeto Err, que representa o erro. FileSystem Contém métodos para realizar operações sobre arquivos, diretórios ou pastas. Financial Contém métodos para realizar cálculos financeiros. Globals Contém membros para obter informações sobre a versão do interpretador de script. Information Contém métodos que retornam resultados dos testes de verificação de tipo ou retornam as informações sobre erros em tempo de execução, o nome do tipo, o valor da cor em RGB etc. Interaction Contém métodos usados para interagir com objetos, aplicações e sistemas. Strings Contém métodos para tratamento e manipulação de strings como, por exemplo, para formatar, buscar um caracter ou sub-string na string, obter o código ASC do caracter, obter o comprimento da string etc. VBMath Contém métodos para realizar operações matemáticas. MÉTODO Um método, conhecido também como procedimento, é um bloco de códigos identificado por um nome. Um método é chamado pelo nome para que execute o bloco de códigos. Um módulo tem um ou mais métodos. As vantagens obtidas com o uso de métodos são: 11 1 - A eliminação de redundância de códigos que precisam ser executados mais de uma vez na aplicação, bastando que os códigos sejam definidos em um método e a aplicação faça chamadas ao método; 2 - A possibilidade de reaproveitamento dos métodos entre diferentes aplicações. Para aumentar a possibilidade de reaproveitamento é importante que os métodos sejam coesos, isto é, realizem finalidades específicas; 3 - A possibilidade de modularização do código da aplicação, tornando-o mais legível e desta forma menos suscetível a erros de codificação; 4 - A possibilidade de que partes do código de uma aplicação sejam desenvolvidas em paralelo por mais de um programador, ou seja, enquanto um programador codifica a parte da aplicação que chama um método, um outro programador pode codificar em paralelo o código do método. Para que esta forma de trabalho seja produtiva é importante que as assinaturas dos métodos sejam previamente definidas para que os programadores utilizem as mesmas assinaturas dos respectivos métodos. SUB-ROTINA (SUB) Uma sub-rotina é um método que executa um bloco de código, mas não retorna um valor. As sub-rotinas são delimitadas pelas palavras-chave Sub e End Sub. Uma sub-rotina tem um nome que a identifica para que seja chamada. A sintaxe de um sub-rotina é: Sub Nome(ByVal NomeParametro1 As Tipo ..., ByVal NomeParametroN As Tipo) End Sub O exemplo ConsoleApplication3-1.sln, apresentado a seguir, define três linhas que acrescentam o prefixo "Olá " e o sufixo ", conheça a TI Verde." em cada nome apresentado na console. Module Module1 Sub Main() Console.WriteLine("Olá" + "Fernando" + ", conheça TI Verde.") Console.WriteLine("Olá" + "Ana" + ", conheça TI Verde.") Console.WriteLine("Olá" + "Claudia" + ", conheça TI Verde.") Aguarda a digitação de uma tecla antes de terminar. Console.ReadKey() End Sub End Module O exemplo ConsoleApplication3-2.sln apresentado a seguir, realiza a mesma tarefa do exemplo anterior utilizando a sub-rotina ExibirMensagem. Observe que este exemplo não apresenta redundância de código comum para acrescentar o prefixo e o sufixo. E, se você quiser, por exemplo, mudar o prefixo para "Oi ", basta substituir uma única vez o prefixo "Olá " por "Oi " na linha 3 do código. Module Module1 Sub ExibirMensagem(ByVal Nome As String) Console.WriteLine("Olá" + Nome + ", conheça TI Verde.") End Sub Sub Main() ExibirMensagem("Fernando") ExibirMensagem("Ana") ExibirMensagem("Claudia") ' Aguarda a digitação de uma tecla antes de terminar. Console.ReadKey() End Sub End Module 12 FUNÇÃO (FUNCTION) Uma função é um método que executa um bloco de código e retorna um valor. As funções são delimitadas pelas palavras-chave Function e End Function. Uma função tem um nome que a identifica para que seja chamada. A sintaxe de uma função é: Function Nome(ByVal NomeParametro1 As Tipo ... ByVal NomeParametroN As Tipo ) ' Código da função... Return expressão End Function O exemplo ConsoleApplication3-3.sln, apresentado a seguir define uma função chamada AreaQuadrado que recebe como argumento o comprimento e retorna o valor de área de quadrado. A sub-rotina Main() chama a função AreaQuadrado passando o valor 3.0 e mais uma vez passando o valor 4.5: Module Module1 Function AreaQuadrado(ByVal Comprimento As Double) 'Calcula a área do quadrado. Return Comprimento*Comprimento End Function Sub Main() Console.WriteLine(AreaQuadrado(3.0)) Console.WriteLine(AreaQuadrado(4.5)) Console.ReadKey() End Sub End Module ENCADEAMENTO DE MÉTODOS Um método pode chamar outro método permitindo assim que métodos mais especializados sejam criados para aumentar a coesão. O exemplo ConsoleApplication3-4.sln, apresentado a seguir define uma função chamada VolumeCubo que recebe como argumento o Comprimento, chama a função AreaQuadrado para obter a área e retona o valor do volume do cubo. A sub-rotina Main() chama a função VolumeCubo passando o valor 3.0: Module Module1 Function AreaQuadrado(ByVal Comprimento As Double) 'Calcula a área do quadrado. Return Comprimento*Comprimento End Function Function VolumeCubo(ByVal Comprimento As Double) 'Chama Função AreaQuadrado. Return AreaQuadrado(Comprimento)*Comprimento End Function Sub Main() Console.WriteLine(VolumeCubo(3.0)) Console.ReadKey() End Sub End Module 13 ESCOPO O escopo define a acessibilidade de uma variável ou método. Escopo de uma Variável Em geral, as variáveis são declaradas com a palavra-chave Dim e, desta forma, são acessíveis apenas dentro do método em que foram declaradas. As variáveis podem ser declaradas fora do método, usando-se a palavra-chave Private ou Public para que sejam acessadas (compartilhadas) por mais de um método. As variáveis Public são acessíveis por todos os métodos da aplicação. Elas são conhecidas como variáveis globais. As variáveis Private são acessíveis apenas pelos métodos situados dentro do mesmo módulo ou da mesma classe onde foram declaradas. O exemplo ConsoleApplication3-5.sln, apresentado a seguir, define uma variável Private chamada Numero do tipo Double, a sub-rotina Main() atribui o valor 1 a esta variavel, depois ela é acessada pela sub-rotina Duplicar() para duplicar o valor dela, depois ela é acessada pela pela sub-rotina Triplicar() para triplicar o valor dela e no final ela é acessada pela Main() para exibir o valor dela. Module Module1 Private Numero As Double Sub Duplicar() 'Acessa Numero declarado fora da sub-rotina e duplica. Numero = Numero*2 End SubSub Triplicar() 'Acessa Numero declarado fora da sub-rotina e triplica. Numero = Numero*3 End Sub Sub Main() Numero = 1.0 Duplicar() Triplicar() Console.WriteLine(Numero) Console.ReadKey() End Sub End Module Escopo de um Método Um método Public pode ser chamado de qualquer parte da aplicação. Este é o default se você não definir a acessibilidade. Um método Private pode ser chamado apenas pelos métodos situados dentro do mesmo módulo ou da mesma classe onde foram definidos. FUNÇÕES INTERNAS A linguagem VB 2010 tem várias funções internas predefinidas que podem ser usadas pela sua aplicação. As funções internas são classificadas em: Funções de Conversão de tipos; Funções de manipulação de string; Funções Matemáticas http://estacio.webaula.com.br/Cursos/gon117/docs/03DS_doc01.pdf 14 AULA 4: PROGRAMAÇÃO ESTRUTURADA A linguagem VB 2010 possui estruturas de controle de fluxo que permitem o desenvolvimento de programas estruturados, que são programas e que não fazem uso da instrução GoTo. E desta forma, são mais fáceis de codificar, compreender e manter (BALENA, 2006). ESTRUTURAS DE CONTROLE DE FLUXO As estruturas de controle de fluxo suportadas pela linguagem VB 2010 são (MSDN, 2010): 1. Estrutura de controle de decisão simples 2. Estrutura de controle de decisão estendida 3. Estrutura de controle de decisão aninhada 4. Estrutura de controle de decisão em seqüência na mesma linha. 5. Estrutura de controle de múltiplas decisões (escolha) 6. Estrutura de controle de repetição controlada por contador (para) 7. Estrutura de controle de repetição While (enquanto) 8. Estrutura de controle de repetição Do (faça) Estruturas de Controle de Decisão Simples A estrutura de controle de decisão simples (se-então-fim_se) permite executar um bloco de código em função da avaliação de uma expressão lógica, chamada também de condição, condição booleana, condição lógica ou expressão booleana. A sintaxe da estrutura de controle de decisão simples em linguagem VB 2010 é: If(condição)Then Bloco de Código End If Onde o bloco de código somente será executado se a condição for verdadeira (True). O exemplo ConsoleApplication4-1.sln, apresentado a seguir, exibe a pergunta "É sustentável (s/n)? ", obtém a entrada de dados que é atribuída na variável Sustentável. Se o valor da variável Sustentável for igual a "s", exibe "Parabéns!". Module Module1 Sub Main() Dim Sustentavel As String Console.Write("É Sustentável (s/n)? ") Sustentavel = Console.ReadLine() If(Sustentavel="s")Then Console.WriteLine("Parabéns!") End If Console.ReadKey() End Sub End Module Estruturas de Controle de Decisão Estendida A sintaxe da estrutura de controle de decisão estendida (se-então-senão-fim_se) em linguagem VB 2010 é: If(condição)Then Bloco de Código1 Else Bloco de Código2 End If Onde o bloco de código 1 será executado se a condição for verdadeira (True) e o programa continuará depois do End If, senão o bloco de código 2 será executado. Desta forma, um dos blocos será executado em função do valor (True ou False) da condição. 15 O exemplo ConsoleApplication4-2.sln, apresentado a seguir, exibe "Digite a sua média final: ", obtém a entrada de dados que é atribuída na variável MediaFinal. Se o valor da variável MediaFinal for maior ou igual a 6.0, exibe "Aprovado", senão exibe "Reprovado". Module Module1 Sub Main() Dim MediaFinal As Single Console.Write("Digite sua Média Final: ") MediaFinal = Console.ReadLine() If(MediaFinal >=6.0)Then Console.WriteLine("Aprovado") Else Console.WriteLine("Reprovado") End If Console.ReadKey() End Sub End Module Estruturas de Controle de Decisão Aninhada A sintaxe de uma estrutura de controle de decisão aninhada em outra em linguagem VB 2010 é: If(condição)Then Bloco de Código1 Else If(condição)Then Bloco de Código2 End If End If No entanto, a linguagem VB 2010 suporta uma sintaxe condensada, apresentada a seguir, que melhora a legibilidade do código. If(condição1)Then Bloco de Código1 ElseIf(condição2) Bloco de Código2 End If A linguagem VB 2010 suporta várias estruturas de decisão aninhadas na sintaxe condensada, que equivale à estrutura de controle de múltiplas decisões (escolha), conforme apresentada a seguir: If(condição1) Then Bloco de Código1 ElseIf(condição2) Then Bloco de Código2 ElseIf(condição3) Then Bloco de Código3 ... End If O exemplo ConsoleApplication4-3.sln, apresentado a seguir, exibe "Digite um número de 0 a 99: ", obtém a entrada de dados que é atribuída na variável Numero. Se o valor da variável Numero estiver entre 0 a 9, exibe " O número está no intervalo de 0 a 9 inclusive.", senão testa se o valor da variável Numero está entre 10 e 99 e, se estiver, exibe " O número está no intervalo de 10 a 99 inclusive.", senão exibe "O número não está no intervalo de 0 a 99 inclusive.". 16 Module Module1 Sub Main() Dim Numero As Byte Console.Write("Digite um número de 0 a 99: ") Numero = Console.ReadLine() If(Numero >=0 And Numero<=9)Then Console.WriteLine("Número entre 0 e 9.") ElseIf(Numero >=10 And Numero<=99)Then Console.WriteLine("Número entra 10 e 99") Else Console.WriteLine("Fora do intervalo indicado.") End If Console.ReadKey() End Sub End Module A linguagem VB 2010 permite expressar uma instrução de controle de decisão em uma única linha, conforme a sintaxe a seguir: If(condição1) Then instrução1 Else instrução2 O ramo verdadeiro (True) ou falso (Else) pode ser composto de mais de uma instrução separadas por dois pontos, conforme a sintaxe a seguir: If(condição1) Then instrução1 : instrução2 Else instrução3 : instrução4 O exemplo ConsoleApplication4-4.sln, apresentado a seguir, é o exemplo ConsoleApplication4-2.sln modificado para fazer uso da estrutura de controle de decisão em uma única linha. Module Module1 Sub Main() Dim MediaFinal As Single Console.Write("Digite sua Média Final: ") MediaFinal = Console.ReadLine() If(MediaFinal >=6.0)Then Console.WriteLine("Aprovado") Else Console.WriteLine("Reprovado") End If Console.ReadKey() End Sub End Module Estrutura de Controle de Múltiplas Decisões (escolha) A linguagem VB 2010 tem a instrução Select Case, que permite definir uma estrutura de controle de múltiplas decisões(escolha) de forma mais otimizada do que com o usa de estrutura de decisão aninhadas, apresentadas anteriormente. Select Case (condição) Case valor ou intervalo de valores ou lista de valores 1 Bloco de código 1 Case valor ou intervalo de valores ou lista de valores 2 Bloco de código 2 ... Case Else Bloco de código N Onde o intervalo de valores é definido usando-se a palavra To na forma valor inicial To valor final e a lista de valores é definida com os valores separados por vírgula na forma valor1, valor2,.., valor n. O exemplo ConsoleApplication4-5.sln, apresentado a seguir, é o exemplo ConsoleApplication4-3.sln que usa estrutura de decisão aninhadas, modificado para fazer uso da instrução Select Case. 17 Module Module1 Sub Main() Dim Numero As Byte Console.Write("Digite um número de 0 a 99: ") Numero = Console.ReadLine() Select Case (Numero) Case 0 To 9 Console.WriteLine("Número entre 0 e 9.") Case 10 To 99 Console.WriteLine("Número entra 10 e 99") Case Else Console.WriteLine("Fora do intervalo indicado.") End Select Console.ReadKey() End Sub End ModuleEstrutura de Controle de Repetição Controlada por Contador (enquanto) A estrutura de controle de repetição While (enquanto) executa o bloco de código enquanto a condição for verdadeira (True). Esta estrutura necessita que uma instrução de inicialização da variável da condição seja definida antes do laço e uma instrução de alteração da variável da condição seja definida dentro do laço para que o laço (loop) não seja repetido infinitamente. A sintaxe da estrutura de controle de repetição While é: Instrução de inicialização da variável da condição While(condição) Bloco de Código com instrução de alteração da variável da condição End /while O exemplo ConsoleApplication4-8.sln, apresentado a seguir, é o exemplo ConsoleApplication4-6.sln modificado para fazer uso da estrutura de controle de repetição While ao invés do For: Module Module1 Sub Main() Dim Contador As Byte = 1 'instrução de inicialização While (Contador <= 10) Console.WriteLine(Contador) 'instrução de alteração da variável da condição Contator= Contador + 1 End While Console.ReadKey() End Sub End Module Estrutura de Controle de Repetição Do (faça) A linguagem VB 2010 suporta duas opções de sintaxe para definir a estrutura de controle de repetição Do (faça). Ambas as sintaxes necessitam que uma instrução de inicialização da variável da condição seja definida antes do laço e uma instrução de alteração da variável da condição seja definida dentro do laço para que o laço (loop) não seja repetido infinitamente. Instrução de inicialização da variável da condição Do While ou Until(condição) Bloco de Código com instrução de alteração da variável da condição Loop Instrução de inicialização da variável da condição Do Bloco de código com instrução de alteração da variável da condição Loop While ou Until (condição) Quando o While é utilizado, o laço será repetido enquanto a condição for verdadeira (True). 18 Quando o Until é utilizado, o laço será repetido até que a condição seja falsa (False). A sintaxe da opção 1 define um laço (loop) que poderá não ser executado ou repetido várias vezes (0 a n vezes). Enquanto a sintaxe da opção 2 define um laço (loop) que será repetido uma (pelo menos) ou várias vezes (1 a n vezes). O exemplo ConsoleApplication4-9.sln, apresentado a seguir, é o exemplo ConsoleApplication4-6.sln modificado para fazer uso da estrutura de controle de repetição Do While ao invés do For, e equivalente ao exemplo ConsoleApplication4-8.sln. Module Module1 Sub Main() Dim Contador As Byte = 1 ' instrução de incialização Do While (Contador <= 10) Console.WriteLine(Contador) ' instrução de alteração da variável da condição Contador = Contador + 1 Loop Console.ReadKey() End Sub End Module O exemplo ConsoleApplication4-10.sln, apresentado a seguir, é o exemplo ConsoleApplication4- 6.sln modificado para fazer uso da estrutura de controle de repetição Do Until ao invés do For, e equivalente ao exemplo ConsoleApplication4-8.sln. Module Module1 Sub Main() Dim Contador As Byte = 1 ' instrução de incialização Do Until Not (Contador <= 10) Console.WriteLine(Contador) ' instrução de alteração da variável da condição Contador = Contador + 1 Loop Console.ReadKey() End Sub End Module 19 AULA 5: TRATAMENTO DE EXCEÇÕES EXCEÇÃO Exceção é um erro no fluxo normal de execução do código de um programa de uma aplicação. O.NET framework oferece uma forma unificada de identificar e tratar exceções entre todas as linguagens de programação .NET (BALENA, 2006). Há dois tipos de exceções: exceções de hardware e exceções de software. As exceções de hardware são causadas por erros do programa no que se refere a hardware como, por exemplo, violação de acesso a endereços de memória. Enquanto as exceções de software são causadas por erros do programa no que se refere a software como, por exemplo, atribuir um valor incompatível a uma variável ou divisão por zero (MACKENZIE e SHARKEY, 2003). TRATAMENTO DE EXCEÇÕES ESTRUTURADAS O tratamento de exceções estruturadas (Structured Exception Handling - SEH) é uma estratégia para codificar o programa de uma aplicação para tratar tanto as exceções de hardware quanto as exceções de software. Dessa forma, o código para tratamento de exceções se torna unificado e mais consistente por tratar tanto as exceções de hardware quanto as exceções de software. Seções do código que estiverem propensas a gerarem exceções como, por exemplo, cálculos, acesso a banco de dados, operações com arquivos etc. (MACKENZIE e SHARKEY, 2003). TIPOS DE EXCEÇÕES Os tipos de exceções derivam da classe System.Exception que é definida no .NET framework. Os principais tipos de exceções são: ArgumentException NotImplementedException ArgumentNullException OutOfMemoryException ArgumentOutOfRangeException OverflowException IndexOutOfRangeException FileNotFoundException O BLOCO TRY...END TRY As palavras-chave Try... End Try delimitam o bloco de códigos protegidos para tratar as exceções que ocorrerem, onde Try delimita o início do bloco e End Try delimita o final do bloco. Try … Catch Ex As Exception … End Try A seção Catch A palavra-chave Catch marca a seção do bloco que captura e trata as exceções que podem eventualmente ocorrer. Em geral, usa-se uma seção Catch para capturar cada tipo de exceção e uma seção Catch, chamada genérica, no final para capturar todos os demais tipos de exceções que não foram capturados pelas seções Catch anteriores. 20 A sintaxe é: Try … Catch ex1 As Exception1 'Código para tratamento da Exception1 … Catch exN As ExceptionN 'Código para tratamento da ExceptionN … 'Captura Genérica Catch ex As Exception 'Código para tratamento das demais exceções … End Try O exemplo ConsoleApplication5-1.sln, apresentado a seguir, declara a variável i do tipo Decimal e atribui o valor 10, declara a variável j do Decimal e atribui o valor zero, define a divisão de i por j sem captura e tratamento de exceção, que ao ser executado é abortado por gerar uma exceção de divisão por zero (DivideByZeroException). Module Module1 Sub Main() Dim i As Decimal = 10 Dim j As Decimal = 0 Dim Resultado As Decimal Resultado = i/j Console.ReadKey() End Sub End Module A imagem mostra a janela de exceção de divisão por zero sem tratamento, apresentada ao se executar o programa pelo IDE do Visual Basic 2010 Express. O exemplo ConsoleApplication5-2.sln, apresentado a seguir, é o exemplo ConsoleApplication5-1.sln modificado para realizar a captura e o tratamento da exceção genérica, ou seja, de qualquer tipo de exceção. 21 Module Module1 Sub Main() Dim i As Decimal = 10 Dim j As Decimal = 0 Dim Resultado As Decimal Try Resultado = i/j Catch ex As Exception 'Captura Genérica Console.WriteLine("Houve um erro de exceção de divisão por zero.") End Try Console.ReadKey() End Sub End Module A imagem mostra a mensagem exibida pela seção de tratamento de exceção genérica do programa. O exemplo ConsoleApplication5-3.sln, apresentado na próxima peça, é o exemplo ConsoleApplication5-1.sln modificado para na primeira seção Catch capturar e tratar a execeção DivideByZeroException e na segunda seção Catch capturar e tratar uma exceção genérica, ou seja, qualquer tipo de exceção. Module Module1 Sub Main() Dim i As Decimal = 10 Dim j As Decimal = 0 Dim Resultado As Decimal Try i = i + 10 Resultado= i/j Catch exDivideByZero As DivideByZeroException 'Captura da DivideByZeroException Console.WriteLine("Houve um erro de exceção de divisão por zero.") Catch exDivideByZero As DivideByZeroException 'Captura Genérica Console.WriteLine("Houve um erro de exceção genérica.") End Try Console.ReadKey() End Sub End Module Ao executar o programa, a primeira seção Catch captura a exceção DivideByZeroException e exibe a mensagem mostrada na imagem. 22 BLOCOS TRY...END TRY ANINHADOS Os blocos Try...End Try podem ser aninhados. O exemplo ConsoleApplication5-4.sln, apresentado a seguir, define um bloco Try...End Try externo que contém um outro bloco Try...End Try interno. Se ocorrer uma exceção na abertura do arquivo, o programa exibe a mensagem "Exceção na abertura do arquivo." e se após a abertura do arquivo sem exceção, ocorrer uma exceção na leitura do arquivo, o programa exibe a mensagem "Exceção na leitura do arquivo." Module Module1 Sub Main() Dim FileName As String = "TestFile.data" ' Bloco externo Try Dim fs As New FileStream(FileName, FileMode.Open, FileAccess.Read) 'Bloco interno Try Dim reader As New BinaryReader(fs) reader.Readlnt32() Catch ex As Exception Console.WriteLine("Exceção na leitura do arquivo.") End Try Catch ex As Exception Console.WriteLine("Exceção na abertura do arquivo.") End Try Console.ReadKey() End Sub End Module A SEÇÃO FINALLY A seção Finally define o código que deverá ser sempre executado, sem ou com a ocorrência de uma exceção, antes de terminar o bloco Try...End Try. Em geral, contém o código para liberar recursos alocados no bloco Try...End Try ou o código comum a ser executado antes de terminar o bloco Try...End Try. O exemplo ConsoleApplication5-5.sln, apresentado a seguir, é o exemplo ConsoleApplication5-3.sln modificado para conter a seção Finally que sempre emite um sinal sonoro, Beep(), antes de terminar o bloco Try...End Try. Module Module1 Sub Main() Dim i As Decimal = 10 Dim j As Decimal = 0 Dim Resultado As Decimal Try i = i + 10 Resultado = i/j Catch exDivideByZero As DivideByZeroException 'Captura da DivideByZeroException Console.WriteLine("Houve um erro de exceção de divisão por zero.") Catch exDivideByZero As DivideByZeroException 'Captura Genérica Console.WriteLine("Houve um erro de exceção genérica.") Finally Beep() End Try Console.ReadKey() End Sub End Module 23 Em algumas situações você pode deseja lançar uma exceção para esta seja tratada por uma rotina de tratamento de exceção ou para gerar uma exceção. A sintaxe da declaração do lançamento da exceção é: Throw [ expressão ] O exemplo ConsoleApplication5-2.sln, apresentado a seguir, é o exemplo ConsoleApplication5-1.sln modificado para lançar uma exceção genérica com a mensagem "Divisor j igual a zero" se o valor da variável j for igual a zero. Como a variável j é declarada e inicializada com valor igual a zero, o programa lança a exceção, que é capturada pela seção Catch, a qual exibe a mensagem "Ocorreu uma exceção: Divisor j igual a zero.", conforme mostra a imagem. Module Module1 Sub Main() Dim i As Decimal = 10 Dim j As Decimal = 0 Dim Resultado As Decimal Try i = i + 10 If(j=0)Then Throw New System.Exception("Divisor igual a zero.") End If Resultado = i/j Catch ex As Exception 'Captura Genérica Console.WriteLine("Ocorreu uma exceção:{0}.",ex.Message) Finally Beep() End Try Console.ReadKey() End Sub End Module Mensagem exibida com o lançamento da exceção genérica. Conteúdo completo de Visual Basic em https://msdn.microsoft.com/pt-br/library/2x7h1hfk.aspx
Compartilhar