Framewoks de Desenvolvimento

Tamanho: px
Começar a partir da página:

Download "Framewoks de Desenvolvimento"

Transcrição

1 Framewoks de Desenvolvimento

2 Conteúdo Unidade 1 Definição de Framework 5 Classificação dos Frameworks 7 Profissionais Envolvidos 8 Benefícios e Desafios Decorrentes da Adoção de um Framework 10 Unidade 2 Plataforma de Desenvolvimento Java 11 Ambiente Eclipse 13 Unidade 3 Introdução ao Framework.NET 18 Visão Geral 19 O que é o Framework.NET 19 Common Language Runtime 19 Biblioteca de Classes do Framework.NET 20 Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do.net 21 A abordagem.net 24 Unidade 4 A Arquitetura.NET 25 CLR (Commom Language Runtime) 25 CTS (Common Type System) 25 CLS (Common Language Specification) 26 BCL (Base Classe Library) 26 Unidade 5 Criando Aplicações com o Visual Studio 28 Versões do Framework.NET e Visual Studio 28 Conhecendo a IDE 29 Criando um Novo Projeto 29 Componentes da IDE 31 Menu 31 2

3 Toolbar (Barra de Ferramentas) 32 Toolbox 32 Solution Explorer 35 Properties 36 Janela de Design 38 Janela de Código Code View 38 Criando um Hello World 38 Criando uma Calculadora 40 Passo 1 Ajustando o Formulário 41 Passo 2 Posicionando os Controles 41 Passo 3 Adicionando Funcionalidades 43 Unidade 6 Programação Orientada a Objetos 47 Introdução 47 Por que OOP existe? 47 Conceitos de encapsulamento, herança e polimorfismo 50 Implementação prática dos conceitos 52 Herança e Agregação 56 Interfaces 63 Tratamento de exceções 69 Conversão de tipos (Typecasting) 75 Unidade 7 Segurança em Aplicações.NET 81 Utilização de Strong Names 81 A importância do StrongName 82 SQL Injection 86 Unidade 8 Acessando Dados com ADO 88 Camada Desconectada 88 Camada Conectada 88 3

4 ADO Object Model 89 Camada Desconectada 89 Camada Conectada 90 Contectando a um Banco de Dados 91 Criando um Banco de Dados 91 Criando um Formulário de Inserção de Dados 93 Criando uma Listagem de Dados 96 Unidade 9 Depurando Aplicações no Visual Studio 99 Erros de Sintaxe (Syntax Errors) 99 Erros em tempo de execução (runtime) 99 Erros de Semântica 99 A Classe Debug 100 Habilitando a Depuração 100 Adicionando BreakPoints 101 Executando a Aplicação em Modo de Depuração 101 Execução Passo a Passo 101 Usando a Janela de Depuração 102 Exibindo a Janela Window 102 Depuração Remota 102 Tracing 102 Classe TraceContext 103 Habilitando o Tracing em uma Aplicação Web 104 Dados do Trace 104 Categorias do Trace 104 Unidade 10 Compilando, Testando e Distribuindo Aplicações.NET Criando um Projeto de Instalação 106 4

5 Unidade 1 Definição de Framework Um framework captura a funcionalidade comum a várias aplicações. As aplicações devem ter algo razoavelmente grande em comum: pertencem a um mesmo domínio de problema: A definição que usamos foca quatro características principais de um framework (Orientado a Objeto): - Um framework provê uma solução para uma família de problemas semelhantes; - Usando um conjunto de classes e interfaces que mostra como decompor a família de problemas; - E como objetos dessas classes colaboram para cumprir suas responsabilidades; - O conjunto de classes deve ser flexível e extensível para permitir a construção de várias aplicações com pouco esforço, especificando apenas as particularidades de cada aplicação; Observe que um framework é uma aplicação quase completa, mas com pedaços faltando. Ao receber um framework, seu trabalho consiste em prover os pedaços que são específicos para sua aplicação. 5

6 Na prática, então, um framework é um conjunto de facilidades definidas por um conjunto de funcionalidades que interagem entre si e que é capaz de auxiliar no trabalho do desenvolvedor em determinada área de atuação desse framework. Esse conceito começou a ser utilizado para ajudar no processo de reutilização de softwares ou pedaços desses softwares. 6

7 Classificação dos Frameworks Orientados a objetos / baseados em componentes Os frameworks podem ser classificados em caixa-branca e caixa-preta [Fayad 97]. Os frameworks caixa-branca baseiam-se nos mecanismos de herança e ligação dinâmica (dynamic binding) presentes em orientação a objetos. Os recursos existentes em um framework caixa-branca são reutilizados e estendidos a partir de: herança de classes do framework e sobrecarga (overriding) de métodos "hook" pré-definidos. Métodos "hook" são definidos em interfaces ou classes abstratas e devem necessariamente ser implementados por uma aplicação. Um exemplo de método hook na linguagem Java é o actionperformed(action Event e) pertencente à interface ActionListener do framework AWT (Abstract Window Toolkit). Este método é chamado sempre que ocorre um evento ActionEvent correspondendo, por exemplo, a um clique de botão. Os padrões de projeto (design patterns) utilizados são o Command, o Observer e o Template Method [Gamma 94]. Frameworks caixa-preta são baseados em componentes de software. A extensão da arquitetura é feita a partir de interfaces definidas para componentes. Os recursos existentes são reutilizados e estendidos por meio de: definição de um componente adequado a uma interface específica e integração de componentes em um framework que utiliza padrões de projeto como o Strategy [Gamma 94]. Quanto ao contexto de utilização do framework há uma classificação proposta em [Fayad 97], segundo a qual os frameworks são classificados em: "Framework de Infraestrutura de Sistema", "Framework de Integração de Middleware" e "Framework de Aplicação". Frameworks de infraestrutura de sistema tratam de questões de projeto como sistemas operacionais, comunicação, interfaces gráficas e linguagens de programação. O framework AWT seria classificado como um framework de infraestrutura de sistema. Frameworks de integração de middleware são responsáveis por integrar aplicações distribuídas e componentes em uma mesma arquitetura. Exemplos de frameworks de middleware são os ORB (Object Request Broker) como o CORBA - Common ORB Architecture, e o RMI - Remote Method Invocation. Frameworks de aplicação tratam de questões de projeto de domínios de aplicação, como telecomunicações, finanças, produção e educação. O framework que se está desenvolvendo neste trabalho é um framework de aplicação. 7

8 Profissionais Envolvidos No processo de desenvolvimento de um framework deve-se produzir uma estrutura de classes com a capacidade de adaptar-se a um conjunto de aplicações diferentes. A principal característica buscada ao desenvolver um framework é a generalidade em relação aos conceitos e funcionalidades do domínio tratado. Além disso, é fundamental que a estrutura produzida seja flexível. Pode-se afirmar que o desenvolvimento de um framework é diferente do desenvolvimento de uma aplicação padrão. A distinção mais importante é que frameworks tem que cobrir todos os conceitos relevantes do domínio enquanto uma aplicação se preocupa somente com os conceitos mencionados nos requisitos da aplicação (Bosh, 1999). A complexidade em se desenvolver um framework deve-se aos seguintes fatores (Silva, 2000): Necessidade de considerar os requisitos de um conjunto significativo de aplicações de modo a torná-lo genérico. Necessidade de ciclos de evolução voltados a dotar a estrutura de classes do framework de alterabilidade (capacidade de alterar suas funcionalidades sem conseqüências imprevistas sobre o conjunto da estrutura) e extensibilidade (capacidade de ampliar a funcionalidade presente sem conseqüências imprevistas sobre o conjunto da estrutura). Em termos práticos, dotar um framework de generabilidade, alterabilidade e extensibilidade requerem uma cuidadosa identificação das partes que devem ser flexíveis e a seleção de soluções de projetos de modo a produzir uma arquitetura bem estruturada. Isto conduz a observação de princípios de projeto orientados a objetos. Em termos ideais, um framework deve abranger todos os conceitos gerais de um domínio de aplicação, deixando apenas aspectos particulares para serem definidos nas aplicações específicas (Silva, 2000). No contexto de desenvolvimento, a existência do framework estará sempre relacionada à existência de outros artefatos que são originadores do framework, originados a partir dele ou que exercem influência na definição das estruturas de classes. A figura mostra as várias fontes de informação que influem na definição da estrutura de um framework: artefatos de software existentes, artefatos de software produzidos a partir do framework e o conhecimento do desenvolvedor do framework (ou a equipe de desenvolvimento). As setas representam o fluxo de informações que levam à produção da estrutura de classes do framework. Como um framework geralmente não consegue ser uma construção completa de um domínio, mas sim uma descrição aproximada, é possível que a construção de aplicações sob um framework leve à obtenção de novos conhecimentos do domínio tratado, que talvez não estivessem disponíveis durante a construção do framework. Estas novas informações podem levar à necessidade de alterar o framework, causando a sua evolução como ilustra a figura: 8

9 Silva (2000) aborda que o desenvolvimento tradicional de aplicações envolve dois tipos de indivíduos: o desenvolvedor de aplicação e o usuário de aplicação (ambos podem corresponder a grupos de indivíduos com diferentes funções). Desenvolvedores devem levantar os requisitos de uma aplicação, desenvolvê-la e entregá-la aos usuários, que por sua vez interagem com a aplicação apenas através de sua interface. O desenvolvimento de frameworks introduz outro indivíduo, a saber, o desenvolvedor de framework. Nesse contexto, o papel do usuário de aplicação é o mesmo descrito acima. O papel do desenvolvedor de aplicações difere do caso anterior pela inserção do framework no processo de desenvolvimento de aplicações. Com isto, o desenvolvedor de aplicações é um usuário de um framework que deve estender e adaptar a estrutura deste framework para a produção de aplicações. De forma genérica as atividades macros são descritas a seguir: Análise de domínio - processo de identificar e organizar o conhecimento sobre alguma classe de problemas o domínio do problema para dar suporte à descrição e solução destes (Arango e Prieto-Díaz, 1991). Projeto de framework o objetivo ao realizar essa atividade é obter um framework flexível. A atividade é árdua já que é difícil encontrar as abstrações corretas e identificar as partes estáveis e variáveis do framework. Para aumentar a extensibilidade e flexibilidade do framework padrões de projeto podem ser usados (Mattsson, 2000). Instanciação do framework a instanciação difere dependendo do tipo de framework: caixa branca (o usuário constrói classes a partir das classes disponíveis), caixa preta (o usuário tem que escolher uma das classes fornecidas). Um framework pode ser instanciado uma ou mais vezes dentro da mesma aplicação ou instanciado em diferentes aplicações (Mattsson,2000). 9

10 Benefícios e Desafios Decorrentes da Adoção de um Framework Os principais benefícios da utilização de frameworks de aplicação orientada a objetos são a modularidade, a reusabilidade, a extensibilidade e a inversão de controle que eles fornecem aos desenvolvedores (Fayad e outros, 1999): Modularidade: frameworks promovem a modularidade por encapsular detalhes de implementação volátil em interfaces estáveis. A modularidade ajuda a aumentar a qualidade do software por localizar o impacto de mudanças no projeto e na implementação. Essa localização reduz o esforço requerido para entender e manter o software existente. Reusabilidade: as interfaces estáveis fornecidas pelo framework promovem a reusabilidade por definir um componente genérico que pode ser reaplicado para criar novas aplicações. A reusabilidade influencia no conhecimento do domínio e prioriza os esforços de desenvolvedores experientes a fim de evitar recriação e revalidação de soluções comuns a requisitos recorrentes de aplicações e desafios de projeto de software. Extensibilidade: um framework promove a extensibilidade por fornecer métodos adaptáveis (hook) explícitos (Pree, 1995). Permitindo as aplicações estenderem suas interfaces estáveis. A extensibilidade é essencial para assegurar a especialização de novos serviços da aplicação e novas características. Inversão de controle: a arquitetura do framework é caracterizada por uma inversão de controle. Isso permite ao framework (ao invés da aplicação) determinar que conjunto de métodos específicos da aplicação invocar em resposta a eventos externos. Frameworks são considerados de grande importância para o desenvolvimento de aplicações orientadas a objetos. Eles são considerados como uma das principais formas através da qual sistemas orientados a objetos podem alcançar a reusabilidade. 10

11 Unidade 2 Plataforma de Desenvolvimento Java Plataforma Java é o nome dado ao ambiente computacional, ou plataforma, da empresa Sun Microsystems (agora Oracle). A plataforma permite desenvolver aplicativos utilizando qualquer uma das linguagens criadas para a plataforma Java, sendo a linguagem padrão a que leva seu próprio nome: Linguagem Java. Uma grande vantagem da plataforma é a de não estar presa a um único sistema operacional ou hardware, pois seus programas rodam através de uma máquina virtual que pode ser emulada em qualquer sistema que suporte a linguagem Java. O universo Java é um vasto conjunto de tecnologias, composto por três plataformas principais que foram criadas para segmentos específicos de aplicações: - Java SE (Java Platform, Standard Edition). É a base da plataforma; inclui o ambiente de execução e as bibliotecas comuns. - Java EE (Java Platform, Enterprise Edition). A edição voltada para o desenvolvimento de aplicações corporativas e para internet. - Java ME (Java Platform, Micro Edition). A edição para o desenvolvimento de aplicações para dispositivos móveis e embarcados. Além disso, podem-se destacar outras duas plataformas Java mais específicas: - Java Card. Voltada para dispositivos embarcados com limitações de processamento e armazenamento, como smart cards e o Java Ring. - JavaFX. Plataforma para desenvolvimento de aplicações multimídia em desktop/web (JavaFX Script) e dispositivos móveis (JavaFX Mobile). Tecnologias Java A plataforma Java é constituída de um grande número de tecnologias, cada uma provê uma porção distinta de todo o ambiente de desenvolvimento e execução de software. Os usuários finais, tipicamente, interagem com a máquina virtual Java (Java Virtual Machine, ou JVM) e um conjunto padrão de bibliotecas de classe. 11

12 Existe um grande número de maneiras de se utilizar uma aplicação Java, incluíndo applets embutidas em páginas web, aplicativos de uso geral em desktops, aplicativos em aparelhos celulares e em servidores de aplicações para Internet. Os desenvolvedores de aplicações em Java utilizam um conjunto de ferramentas de desenvolvimento, o JDK. 12

13 Ambiente Eclipse Eclipse é um IDE (ambiente de desenvolvimento integrado) de código aberto. Existe mais ferramentas similares de código aberto disponíveis, mas o Eclipse IDE acabou tornando-se uma ótima alternativa em virtude da quantidade de plug-ins disponíveis para dar suporte aos diversos tipos de tecnologias que envolvem o desenvolvimento de softwares e sistemas. Sua instalação é muito simples, podemos baixá-lo de em forma de arquivo ZIP e só temos que descompactá-lo na pasta onde quisermos tê-lo instalado. No site oficial, há opções para download que sugerem um desenvolvimento mais focado para uma ou outra área. Isso se deve ao fato de que essas opções de download já trazem embutidos alguns plug-ins necessários para facilitar o desenvolvimento dos projetos focados em uma ou outra área. Para executá-lo basta acionar o arquivo Eclipse.exe. Uma vez iniciado abrirá uma tela inicial solicitando onde queremos que o Eclipse vá salvando os projetos que criarmos: Obs.: Nessa apostila optamos por usar a versão Eclipse IDE for Java EE Developers, que já traz o suporte para o desenvolvimento de aplicações web. 13

14 Após escolher a área de trabalho (onde serão criados os diretórios - projetos com seus códigos), abrirá a primeira tela da IDE, dando as boas vindas. Essa página inicial pode ser fechada. Atrás dela está efetivamente o ambiente de desenvolvimento. Caso seja de seu interesse, navegue pelas opções que aparecem nessa tela inicial para obter maiores informações sobre a IDE. 14

15 A primeira tela realmente significativa do Eclipse IDE possui uma série de informações organizadas em painéis. O Package Explorer, que está no lado esquerdo da tela, é a área onde estarão dispostas as informações básicas do seu projeto arquivos, diretórios, plugins, etc. Os outros painéis não são tão importantes e alguns podem até ser fechados de acordo com a preferência do desenvolvedor. Todos os painéis podem ser abertos/fechados através do menu Window, em Show View. Outro painel interessante é o Outline, que fornece informações sobre as classes, métodos e outros recursos usados no seu projeto. Para vermos esses painéis em pleno funcionamento, criaremos um exemplo básico Olá Mundo, como segue: - Vá ao menu File e escolha New e dentro dessa opção Java Project. 15

16 - Defina um nome para seu projeto. - O Eclipse já encontra automaticamente o JDK instalado no seu computador, bastando apenas avançar para a próxima etapa. - Nessa próxima tela (que é opcional) você pode configurar plugins e outros recursos. Se isso não for do seu interesse, apenas confirme e finalize essa etapa. 16

17 - Na etapa seguinte, você deverá criar um novo arquivo, vinculado ao projeto Java que você acabou de criar. - Dê um nome (Mundo) para esse novo arquivo (classe Java), escolha se você quer que essa nova classe já venha com o código referente ao método main e construtores da superclasse (caso esteja herdando de outra classe). 17

18 Como todo bom software de desenvolvimento, o Eclipse traz um auxílio ao desenvolvedor quando esse está escrevendo o código, que chamamos de auto completar. Esse recurso permite que não seja necessário decorar todas as possibilidades de uso das funções e métodos disponíveis da linguagem. Após escrever o código, podemos visualizar o resultado no painel Console (nesse nosso exemplo) ou em um navegador (caso seja um projeto web) ou outro local conforme a configuração do projeto criado. Unidade 3 Introdução ao Framework.NET 18

19 Visão Geral O Framework.NET é um framework de desenvolvimento criado pela Microsoft para a criação de aplicações voltadas às plataformas Microsoft e outras. Entender o funcionamento básico do Framework.NET é essencial pois todo o desenvolvimento de aplicações utilizando esse framework se resume na utilização das classes que compõem o mesmo. Nesse capítulo veremos os componentes chaves do Framework.NET, assim como o papel que cada um desempenha. O que é o Framework.NET O framework.net possue dois componentes chaves: O Common Language Runtime A biblioteca de classes do.net Framework O Common Language Runtime (CLR) é o agente que gerencia as aplicações.net em tempo de execução. Ele fornece recursos chave como gerenciamento de memória, threads, e gerenciamento de recursos. As aplicações que rodam sobre o CLR são conhecidas como aplicações de código gerenciado (managed code), todas as demais são conhecidas como aplicações de código não gerenciado (unmanaged code). As bibliotecas do Framework.NET são um conjunto de classes reutilizáveis que fornecem todas as funcionalidades que sua aplicação necessita. Essas bibliotecas permitem você desenvolver tanto aplicações Windows como aplicações ASP.NET, ou mesmo aplicações para dispositivos móveis Windows Mobile. Common Language Runtime A Common Language Runtime (CLR) é a máquina virtual do Framework.NET. Ela roda em sistemas operacionais Windows (XP, Vista, Server, etc), e sua função é executar as aplicações.net compiladas em um formato bytecode denominado MSIL (Microsoft Intermediate Language). Durante a execução, o CLR JIT (Just-in-time ) compila o bytecode em linguagem de máquina nativo e executa a aplicação. Ou ainda, o código MSIL pode já estar precompilado em código nativo, e nesse caso o JIT não é necessário, o que aumenta o desempenho da aplicação. O CLR oferece os seguinte serviços: Gerenciamento de memória e garbage collection Gerenciamento de thread 19

20 Gerenciamento de exceções Segurança Os desenvolvedores.net pode desenvolver aplicações usando qualquer linguagem.net como C#, VB.NET, ou C++. O bytecode MSIL permite a criação de aplicações.net portáveis para outras plataformas pelo fato de as mesmas só serem compiladas em linguagem de máquina na hora de sua execução. As aplicações.net não são aplicações Win32 propriamente ditas (apesar de executarem no ambiente Windows),razão pela qual o runtime Win32 não sabe como executá-las. O Win32, ao identificar uma aplicação.net, dispara o runtime.net que, a partir desse momento, assume o controle da aplicação no sentido mais amplo da palavra, porque, dentre outras coisas, é ele quem vai cuidar do gerenciamento da memória via um mecanismo de gerenciamento de memória chamado Garbage Collector (GC) ou coletor de lixo, acerca do qual falaremos mais tarde. Esse gerenciamento da memória torna os programas menos susceptíveis a erros. Mais ainda, o CLR como seu próprio nome o diz, é compartilhado e, portanto, não temos um runtime para VB.NET, outro para C# etc. É o mesmo para todo mundo. Biblioteca de Classes do Framework.NET A biblioteca de classes do Framework.NET permite a você desenvolver: Aplicações console Aplicações windows Windows services Aplicações ASP.NET Web Services Aplicações Windows Communication Foundation (WCF) Aplicações Windows Presentation Foundation (WPF) Aplicações Windows Workflow Foundation (WF) As bibliotecas de classe são organizadas utilizando a hierarquia de namespaces. Por exemplo, todas as classes que executam operação de IO estão localizadas no namespace System.IO, e as classes que executam expressões regulares estão localizadas sob o namespace System.Text.RegularExpressions. As bibliotecas do Framework.NET estão divididas em duas partes: Framework Class Library (FCL) 20

21 Base Class Library (BCL) A BCL é um subconjunto é um subconjunto de toda a biblioteca e contém um conjunto de classes que fornecem funcionalidades básicas para suas aplicações. Algumas classes da BCL, estão guardadas na DLL mscorlib.dll, System.dll, e System.core.dll. A BCL está disponível em todas as linguagens suportadas pelo Framework.NET e encapsula todas funções comuns como manipulação de arquivos, acesso a banco de dados, manipulação de graficos, e documentos XML. A FCL compõem toda a biblioteca e fornece as classes para desenvolver todos os diferentes tipos de aplicações descritos acima. Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do.net Algumas das dificuldades encontradas no desenvolvimento de sistemas Windows antes do.net são: Complexidade associada a linguagens de programação de difícil sintaxe, e ainda as dores de cabeça provocadas pelo gerenciamento da memória heap por parte do programador. Pouca integração e reaproveitamento de código entre linguagens de programação diferentes; ausência de implementação de mecanismo de herança entre linguagens diferentes. Diversidade com pouca integração na resolução de problemas complexos, dificultando a compreensão e o desenvolvimento dos sistemas. Falta de portabilidade de código executável entre plataformas diferentes. Vejamos a evolução histórica das ferramentas da Microsoft: 21

22 Apenas para ilustrar um pouco a situação atual, vamos apresentar um pequeno estudo de caso. Para simplificar o nosso problema, vamos considerar apenas as soluções Microsoft. Imaginemos uma situação hipotética na qual é solicitada uma solução de home banking que aceite requisições de um browser da Internet ou qualquer outro dispositivo como handheld, telefone celular etc.; vejamos qual seria a resposta imediata dos recursos de software que eu iria precisar: 1. Uma linguagem de programação para desenvolver as páginas dinâmicas: de cara, VBScript ou JScript. 2. Precisamos desenvolver alguns objetos COM ou COM+ no servidor, mas por questões de performance e poder de linguagem, escolhemos a linguagem C++, e claro, o compilador C++ do MS Visual Studio. 3. Vamos precisar de alguns componentes para executar no MS Queue server ou então no MS transaction server, e escolhemos a linguagem Visual Basic porque temos pessoal que já fez esse tipo de trabalho usando VB. 4. Bem, vamos falar o óbvio, mas precisamos também de Web designers com domínio de HTML, Flash, ferramentas de editoração gráfica etc. 5. Ainda temos um problema para resolver, que é o fato de termos clientes heterogêneos que não conseguem ler um formato padrão como uma Web page em HTML. Ok, agora é o momento de correr atrás do pessoal com todas essas competências, tentar gerenciar essa salada de tecnologias e linguagens de programação e, de quebra, fazer funcionar tudo direitinho. 22

23 E esta era uma situação bem comum no desenvolvimento de software até pouco tempo atrás: ter de costurar uma série de linguagens + ferramentas + tecnologias + modelos de objetos + linguagens de script vs. linguagens de programação completas + linguagens de marcação. Usando o.net podemos proporcionar uma solução alternativa, de menor complexidade de implementação, mais integrada: 1. Uma linguagem de programação para desenvolver as páginas dinâmicas no servidor Web: C# usando o Visual Studio. 2. Uma linguagem de programação para desenvolver objetos reusáveis, armazenados em uma DLL no servidor: C# usando o Visual Studio. 3. Uma linguagem de marcação maleável o suficiente de sorte que permita mostrar o conteúdo em diversos dispositivos: XML, gerado pelo C# ou pré-montado para alguns casos. 4. Todo o trabalho de formatação e transformação dos documentos XML gerados pela solução de homebank será feito usando XSL para gerar a linguagem de marcação suportada no lado cliente. Ah! Com que linguagem vamos fazer estas transformações? Com C# é claro! Mas os nossos desenvolvedores têm um background muito forte em VB, de forma que nós descartamos o C# como alternativa. Não tem problema, tudo o que foi dito acima continua válido, vamos mudar apenas a linguagem de C# para VB. A plataforma.net permite que usemos a linguagem de programação da qual mais temos domínio e mesmo assim continuamos a usufruir todo o seu potencial. O exemplo anterior foi apenas para ilustrar o contexto atual de desenvolvimento de sistemas complexos, onde temos de realmente fazer uma ginástica muito grande integrar todas as partes constituintes da nossa solução. A boa notícia é que, como mostramos no exemplo, com.net esta situação está, digamos assim, findando esse problema, porque, como você pode ter percebido, a sua solução caiu de três linguagens de programação para apenas uma, e o resto das tecnologias que usamos (COM+, por exemplo) se integra perfeitamente com o restante da solução. Apenas falando no quesito da clareza e reutilização de código, algumas bibliotecas de classes, como MFC (Microsoft Foundation Class), surgem nesse ínterim, mas têm como foco a linguagem C/C++ e não podem ser usadas a partir do Power Builder, por exemplo, ou então Delphi, que tem a sua própria biblioteca de componentes reutilizáveis. O que equivale a dizer que essas bibliotecas não podem ser usadas a partir de qualquer linguagem de programação, o que torna o reaproveitamento de código ainda mais difícil. Mesmo tecnologias como COM e CORBA sempre apresentam os mesmos problemas de dificuldade de aprendizado por causa de sua complexidade; ou então, mesmo quando oferecem um modelo de objetos comum a ser usado por outras linguagens que não VB ou C++,acabam esbarrando no fato de que cada linguagem de programação implementa os tipos de uma forma diferente. E finalmente, quando achamos que conseguimos resolver os problemas dos tipos, somos barrados porque não conseguimos programar relações de herança entre linguagens diferentes. 23

24 Paralelamente às iniciativas da Microsoft, em 1995 surge a linguagem JAVA (na verdade, mais que uma linguagem, é uma plataforma de desenvolvimento) e, apesar de oferecer há mais de dez anos a proposta de portabilidade de código executável, (leia-se, compile uma vez e rode em qualquer plataforma ), é JAVA-cêntrica, o que obriga o programador a aprender uma nova linguagem se realmente quiser usufruir os recursos que ela oferece. Mas você pode perguntar: e.net não nos obriga a aprender C#? A resposta é não e saberemos mais adiante como isso é feito. A abordagem.net Citaremos a seguir algumas das características de.net que visam a resolver os problemas citados acima: Independência de linguagem de programação: o que permite a implementação do mecanismo de herança, controle de exceções e depuração entre linguagens de programação diferentes. Reutilização de código legado: o que implica em reaproveitamento de código escrito usando outras tecnologias como COM, COM+,ATL, DLLs e outras bibliotecas existentes. Tempo de execução compartilhado: o runtime de.net é compartilhado entre as diversas linguagens que a suportam, o que quer dizer que não existe um runtime diferente para cada linguagem que implementa.net. Sistemas auto-explicativos e controle de versões: cada peça de código.net contém em si mesma a informação necessária e suficiente de forma que o runtime não precise procurar no registro do Windows mais informações sobre o programa que está sendo executado. O runtime encontra essas informações no próprio sistema em questão e sabe qual a versão a ser executada, sem acusar aqueles velhos conflitos de incompatibilidade ao registrar DLLs no Windows. Simplicidade na resolução de problemas complexos. 24

25 Unidade 4 A Arquitetura.NET Para melhor entendermos tudo o que temos dito até aqui, vamos falar um pouco da arquitetura de.net e os seus principais componentes. CLR (Commom Language Runtime) O CLR, ou tempo de execução compartilhado, é o ambiente de execução das aplicações.net. Como o leitor já deve ter atentado, as aplicações.net não são aplicações Win32 propriamente ditas (apesar de executarem no ambiente Windows),razão pela qual o runtime Win32 não sabe como executá-las. O Win32, ao identificar uma aplicação.net, dispara o runtime.net que, a partir desse momento, assume o controle da aplicação no sentido mais amplo da palavra, porque, dentre outras coisas, é ele quem vai cuidar do gerenciamento da memória via um mecanismo de gerenciamento de memória chamado Garbage Collector (GC) ou coletor de lixo, acerca do qual falaremos mais tarde. Esse gerenciamento da memória torna os programas menos susceptíveis a erros. Mais ainda, o CLR como seu próprio nome o diz, é compartilhado e, portanto, não temos um runtime para VB.NET, outro para C# etc. É o mesmo para todo mundo. CTS (Common Type System) O CTS, ou Sistema Comum de Tipos, que também faz parte do CLR, define os tipos suportados por.net e as suas características. Cada linguagem que suporta.net tem de, necessariamente, suportar esses tipos. Apesar de que a especificação não demanda que todos os tipos definidos no CTS sejam suportados pela linguagem, esses tipos podem ser um subconjunto do CTS, ou ainda um superconjunto. No módulo dois falaremos mais a respeito dos diferentes tipos especificados no CTS. Um conjunto de classes básicas que define todos os tipos é implementado na CTS. Por exemplo: um tipo Enum deve derivar da classe System. Enum e todas as linguagens devem implementar o tipo Enum dessa forma. Todo tipo deriva da classe Object, porque em.net tudo é um objeto e, portanto, todos os tipos devem ter como raiz essa classe. E é dessa forma que os diversos tipos nas diversas linguagens são implementados, obedecendo às regras definidas no CTS. Na.NET, e em C# conseqüentemente, todos os tipos derivam de uma raiz comum: a classe Object, o que equivale a dizer que todos os tipos são objetos, por definição. 25

26 CLS (Common Language Specification) O CLS, ou Especificação Comum da Linguagem, é um subconjunto do CTS, e define um conjunto de regras que qualquer linguagem que implemente a.net deve seguir a fim de que o código gerado resultante da compilação de qualquer peça de software escrita na referida linguagem seja perfeitamente entendido pelo runtime.net. Seguir essas regras é um imperativo porque, caso contrário, um dos grandes ganhos do.net, que é a independência da linguagem de programação e a sua interoperabilidade, fica comprometido. A grosso modo, dizer que uma linguagem é compatível com o CLS significa dizer que mesmo quando esta é sintaticamente diferente de qualquer outra que implemente.net, semanticamente ela é igual, porque na hora da compilação será gerado um código intermediário (e não código assembly dependente da arquitetura do processador) equivalente para duas peças de código iguais, porém escritas em linguagens diferentes. É importante entender esse conceito para não pensar que o código desenvolvido em C# não pode interagir com código desenvolvido em VB ou outras linguagens, porque mesmo estas sendo diferentes, todas são compatíveis com o CLS. BCL (Base Classe Library) Como era de se esperar, uma plataforma que promete facilitar o desenvolvimento de sistemas precisa ter uma biblioteca de classes básica que alavanque a simplicidade e a rapidez no desenvolvimento de sistemas. É este o objetivo da BCL (Biblioteca de Classes Base), oferecer ao desenvolvedor uma biblioteca consistente de componentes de software reutilizáveis que não apenas facilitem, mas também que acelerem o desenvolvimento de sistemas. Na BCL encontramos classes que contemplam desde um novo sistema de janelas a bibliotecas de entrada/saída, gráficos, sockets, gerenciamento da memória etc. Esta biblioteca de classes é organizada hierarquicamente em uma estrutura conhecida como namespace. Ao desenvolver um componente de software reusável, este precisa ser estruturado em um namespace para que possa ser usado a partir de um outro programa externo. A seguir mostramos uma tabela com alguns dos principais namespaces que fazem parte da BCL: 26

27 27

28 Unidade 5 Criando Aplicações com o Visual Studio O Visual Studio 2008 é um ambiente extremamente versátil e poderoso para o desenvolvimento de aplicações.net. Técnicamente, é possível escrever aplicações.net usando um editor de texto simples e um compilador. Entretanto, o Visual Studio torna essa tarefa muito mais fácil e produtiva por possuir um ambiente totalmente integrado e voltado à produtividade. Ele também disponibiliza um depurador e tem suporte a IntelliSense. Temos ainda a vantagem de trabalhar com todos os dados de forma integrada dentro de um mesmo projeto, com suporte a versionamento e compilação distintas para ambientes de produção e desenvolvimento, dando assim controle no gerenciamento do ciclo de vida da aplicação. Versões do Framework.NET e Visual Studio A seguinte tabela mostra a relação entre a versão do Visual Studio e a versão do Framework que contém o mesmo: Versão do Framework Versão Visual Studio 1.0 Visual Studio.NET Visual Studio.NET Visual Studio Disponibilizado com o Windows Vista 3.5 Visual Studio 2008 C om o Visual Studio 2008 é possível desenvolver para múltiplas versões do Framework.NET: 2.0, 3.0 e 3.5. Permitindo a continuidade e migração de aplicações desenvolvidas em 28

29 versões anteriores. Sem a necessidade de migrar toda a aplicação de uma só vez. Você pode também, criar uma nova aplicação voltada a uma versão anterior do Framework, bastando para isso indicar a versão desejada ao criar um novo projeto. Conhecendo a IDE Ao iniciar o Visual Studio 2008, temos acesso a sua interface: Criando um Novo Projeto Para criar um novo projeto selecione File > New > Project Será exibida a caixa de diáligo New Project, que exibirá os templates de aplicações do Visual Studio. Um grande número de templates de projetos e itens de projeto já vem pré-instalados com o Visual Studio. Esses templates aparecem como tipos de projetos dentro do menu File > New Project. Você pode utilizar qualquer um desses templates para criar um projeto básico que criará para você um conjunto mínimo de itens que sua aplicação necessita como classes, 29

30 controles, e referências a bibliotecas do framework. Você pode usar os templates tanto para criar aplicações desktop Windows Forms, como aplicações Web. Os templates estão categorizados pela linguagem e pelo tipo de aplicação. Um nome de projeto default é apresentado (WindowsFormsApplication1) no campo Name e também: Location: a pasta onde o projeto será salvo Solution Name: o nome da solução, que por default tem o mesmo nome do projeto. Entretanto, você pode modificar o nome da solução se você quiser que seja diferente. Lembre-se que uma solução pode ter mais de um projeto. Create directory for solution: se você desmarcar essa opção, uma solução não será criada para o seu projeto. Você também pode, no canto superior esquerdo, selecionar a versão do Framework para qual você está desenvolvendo a aplicação: 30

31 Selecione a linguagem Visual C#, nos templates Windows Forms Application e clique em OK. Um novo projeto vazio será criado. Componentes da IDE Menu A barra de menu contém os comandos do Visual Studio como o menu File, para criação de novos projetos, abertura de projetos existentes, opção de salvar projetos formulários, etc. 31

32 É possível de ser customizado em Tools > Customize. Toolbar (Barra de Ferramentas) Contém atalhos para muitos dos comandos mais utilizados. Assim como o menu também é customizavel, bastando para isso clicar com o botão direito em qualquer toolbar existente e abrirá uma lista de barras de ferramentas disponíveis, e ao final da lista, a opção de customizar as mesmas. Toolbox A Toolbox contém todos os controles que você pode utilizar em suas aplicações. Você pode arrastar os controles da toolbox para dentro do painel de design da sua aplicação. Cada aba da toolbox contém controles agrupados para fins específicos. Você pode criar sua própria tab para armazenar seus próprios controls. Para tanto basta clicar com o botão direito na Toolbox e selecionar Add Tab. 32

33 Para adicionar controles a Toolbox, clique com o botão direiton na aba em que você quer adicioná-los e selecione a opção Choose Items. Abrirá a caixa de diálogo Choose Toolbox Itens. Você pode adicionar os seguintes tipos de controles à Toolbox: Componentes do Framework.NET 33

34 Componentes COM Componentes WPF Atividades de Workflow Você também pode clicar no botão Browse e procurar pela DLL que contém os controles que você quer adicionar a aplicação. Outra maneira de adicionar controles à Toolbox é arrastando a DLL para dentro da Toolbox. Você pode reposicionar a Toolbox arrastando e colocando ela dentro de um dos pontos de ancoramento que aparecerão na tela: Se você tiver problema de espaço em seu monitor, pode ainda, utilizar o botão Auto Hide para ganhar algum espaço na tela. 34

35 Solution Explorer Na aba Solution Explorer, temos todos os arquivos e recursos utilizados em nosso projeto. A solução pode conter um ou mais projetos. Os botões diponíveis na barra de ferramentas dessa aba são: Properties Show All Files Refresh View Code View Designer View Class Diagram Esses botões são sensíveis ao contexto, ou seja, alguns deles podem não estar visíveis dependendo do ítem que estiver selecionado. Por exemplo, ao selecionar o nome do projeto, os botões View Code e View Designer não são mostrados. Para adicionar novos itens como Formulários ou Classes ao seu projeto, clique com o botão direito sobre o nome do projeto no Solution Explorer, e selecione Add, e escolha o item a ser adicionado: 35

36 Você também pode adicionar projetos novos em File>Add New Project ou existentes em File > Existing Project. Quando você tem mais de um projeto na aplicação, um dos projetos deve ser marcado como StartUp Project. Que será o projeto que irá será depurado ao se pressionar F5. Para alterar o projeto inicial, clique com o botão direito sobre o projeto que você deseja que seja o inicial e selecione Set as Startup Project. Properties A janela de propriedades mostra as propriedades associadas ao diversos itens selecionados no projeto (Windows Forms, controles, projetos, soluções etc). A figura abaixo mostra a janela de propriedades de um objeto Windows Form. Por default as propriedades são listadas por categoria, mas você pode optar por visualizá-las em ordem 36

37 alfabética. Alternativamente, você pode escolher exibir os eventos relacionados ao objeto selecionado. Todos os valores default são exibidos em fonte normal, enquanto os valores que você alterar são exibidos em negrito. Isso é muito útil para identificar rapidamente quais atributos você mudou. Você também pode usar a Properties window para exibir eventos. Para cada evento você pode associar uma função já existente no projeto para gerencia-lo, ou então criar uma, simplesmente dê um duplo clique na propriedade em que você quer criar o evento. 37

38 Janela de Design A janela de Design permite você visualizar e desenhar a interface da sua aplicação. Dependendo do tipo de projeto que você estiver desenvolvendo, um tipo diferente de janela aparecerá para você arrastar controles para ela. Para alternar para o code-behind da aplicação, você pode tanto usar um duplo clique na interface, ou usar um clique com o botão direito sobre o Solution Explorer e selecionar o item View Code. Janela de Código Code View Permite você visualizar e escrever a lógica da sua aplicação. Você pode alternar entre o modo de design e o código clicando nas tabs. Você pode organizar as tabs tanto horizontalmente como verticalmente, clicando com o botão direito e selecionado New Horizontal Tab Group ou New Vertical Tab Group. Criando um Hello World Vamos criar nosso primeiro aplicativo Windows Form. Caso já se encontre no Visual Studio, feche o projeto atual, se houver algum aberto, em File > Close Project. Vamos criar uma nova aplicação Windows Form, vá em File > New Project, em Project Types, selecione Visual C# > Windows, no campo Templates selecione Windows Forms Application, no campo name dê o nome de HelloWorld e clique em Ok 38

39 Na janela de Design, selecione o Form recém criado, e na janela Properties altere a propriedade Text para Hello World. Em seguida, altere a propriedade Name para frmhello. Na Toolbox, abra a aba Common Controls e arraste um controle Button para dentro do Form. Selecione o label recém criado, e na janela Properties altere a propriedade Text para Clique aqui e a propriedade Name para btnola. Agora adicionaremos algumas funcionalidades ao Form. Na janela de Design, dê um duplo clique sobre o botão recém criado. Abrirá a aba de edição do code-behind. Insira a seguinte linha de comando: MessageBox.Show("Hello world!"); O código completo deve ficar como o a seguir: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace HelloWorld public partial class frmhello : Form public frmhello() InitializeComponent(); private void btnola_click(object sender, EventArgs e) MessageBox.Show("Hello world!"); Seu formulário deve ficar como o a seguir: 39

40 Para executá-lo, vá em Debug > Start Debugging ou pressione F5 ou ainda, clique no botão Start Debugging da barra de ferramentas do Visual Studio. A aplicação deve executar corretamente, se não hover erros, abrindo o formulário, e ao clicar no botão aparecerá a seguinte mensagem: Criando uma Calculadora Nesse exemplo vamos criar uma calculadora. Ela terá dois campos para a entrada dos números a serem operados, um label para apresentação do resultado, e 5 cinco botões para execução das operações de soma, subtração, multiplicação, adição e potênciação, e também um botão para limpar os campos e resultado e um botão para fechar a calculadora. Inicie o Visual Studio, se você já estiver como ele iniciado, salve o seu trabalho e feche o projeto atual em File > Close Project. 40

41 Crie um novo Projeto em File > New Project, em Project Types selecione Visual C# > Windows, e em Templates selecione Windows Forms Application. No campo nome escreva Calculadora e clique Ok. Passo 1 Ajustando o Formulário Selecione o formulário recém criado, e altere as propriedades do mesmo na janela Properties conforme a seguir: Text: Calculadora Name: frmcalculadora Passo 2 Posicionando os Controles Arraste para o formulário apartir da Toolbox, aba Common Controls, os controles listados abaixo alterando suas propriedades conforme a seguir: Controle Label Text: Primeiro Operador Name: lbloperador1 Controle Textbox Name: txtoperador1 Controle Label Text: Segundo Operador Name: lbloperador2 Controle Texbox: Name: txtoperador2 Controle Label Name: lblresultado Text: 0 41

42 Controle Button: Text: + Name: btnsomar Controle Button: Text: - Name: btnsubtrair Controle Button Text: * Name: btnmultiplicar Controle Button Text: / Name: btndividir Controle Button Text: Pot Name: btnpotenciacao Controle Button Text: Limpar Name: btnlimpar Controle Button Text: Sair Name: btnsair Ajuste a forma, disposição e tamanho de cada controle conforme for necessário e salve seu projeto. Seu formulário deve ficar parecido com o a seguir: 42

43 Passo 3 Adicionando Funcionalidades Agora iremos adicionar algum código C# para adicionar as funcionalidades da nossa calculadora. Primeiro criaremos três variáveis auxiliares que receberão os valores dos Operadores 1 e 2, já convertidos de String para Double, e uma variável Double para armazenar o resultado da operação. E finalmente uma função que fará a conversão dos valores nos campos txtoperador1 e txtoperador2 para double. Clique em uma área sem controles do formulário com o botão direito, e selecione View Code. Dentro do código C# do formulário, vamos inserir o código abaixo: Primeiro vamos adicionar o código para cáculo da soma. Clique duas vezes sobre o botão + e adicione o código abaixo ao evento Click do mesmo: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; 43

44 using System.Linq; using System.Text; using System.Windows.Forms; namespace Calculadora public partial class frmcalculadora : Form double op1; double op2; double resultado; public void converteentradas() op1 = 0; op2 = 0; if (txtoperador1.text!= "") Double.TryParse(txtOperador1.Text, out op1); if (txtoperador2.text!= "") Double.TryParse(txtOperador2.Text, out op2); public frmcalculadora() InitializeComponent(); Agora adicionaremos o código ao evento click do botão somar. Para isso, alterne para a aba Form1.cs [Design] e clique duas vezes sobre o botão +, adicione o seguinte código: e) private void btnsomar_click(object sender, EventArgs converteentradas(); resultado = op1 + op2; lblresultado.text = resultado.tostring(); Alterne novamente para o modo de Design e dê um duplo clique no botão - : 44

45 private void btnsubtrair_click(object sender, EventArgs e) converteentradas(); resultado = op1 - op2; lblresultado.text = resultado.tostring(); Observe que esse procedimento é necessário, pois ao fazer isso o Visual Studio, automaticamente liga a função sendo criada ao evento click do controle. O que pode ser verificado na janela de propriedades, ao se clicar no botão Events Da mesma forma para os demais botões com o código abaixo: private void btnmultiplicar_click(object sender, EventArgs e) converteentradas(); resultado = op1 * op2; lblresultado.text = resultado.tostring(); e) private void btndividir_click(object sender, EventArgs converteentradas(); resultado = op1 / op2; lblresultado.text = resultado.tostring(); private void btnpotenciacao_click(object sender, EventArgs e) converteentradas(); resultado = Math.Pow(op1, op2); lblresultado.text = resultado.tostring(); e) private void btnlimpar_click(object sender, EventArgs txtoperador1.text = ""; 45

46 txtoperador2.text = ""; private void btnsair_click(object sender, EventArgs e) Application.Exit(); Salve o projeto e execute a aplicação pressionando F5. 46

47 Unidade 6 Programação Orientada a Objetos Introdução A programação orientada a objetos (OOP) veio para ficar, sem dúvida nenhuma. Ela permite que sistemas complexos sejam desenvolvidos com mais facilidade, tanto na implementação inicial quanto na manutenção. O produto mais popular do Visual Studio até hoje tem sido o Visual Basic. Porém, reclamava-se muito da ausência de um suporte mais completo a todos os requisitos que caracterizavam uma linguagem de programação orientada a objetos (OOP). Com a arquitetura.net, a Microsoft parece ter resolvido atender ao clamor da comunidade de desenvolvedores atacando em todos os flancos. Vários melhoramentos foram feitos no Visual Basic, de forma que ele pode ser considerado agora como orientado a objetos; mas é em C#, sem dúvida alguma, que se terá acesso a uma linguagem de programação que implementa, de maneira simples e direta (sem as complicações do C++), todos os requisitos de uma linguagem OOP em conjunto com uma forte tipagem de dados (um dos pontos fracos do VB). Com isso, a programação torna-se mais sólida e muitos erros podem ser eliminados ainda em tempo de compilação. Por que OOP existe? Antes de continuarmos, vamos voltar um pouco no tempo e entender de onde vem a idéia por trás da programação orientada a objetos. O conceito predominante de programação antes de OOP era a chamada programação procedural. Consistia basicamente em dividir a tarefa de programação em pequenos blocos de código chamados de procedimentos (procedures, em inglês), também conhecidos na época como sub-rotinas. Em todos os casos, o que se fazia, basicamente, era escrever um trecho de código que manipulasse os valores de algumas variáveis e desse algum tipo de retorno. Exemplificando (código em português): x = 0 Enquanto x < 10 47

48 x = x + 1 Fim Enquanto O exemplo acima é muito simples, mas bastante ilustrativo. Mostra que existem dados (variáveis) e códigos que manipulam esses dados (estruturas de controle). Qual o inconveniente disso? Supondo que x fosse um valor que tivesse de ser exibido na tela, seria necessário acrescentar algum código que fizesse isso. Ou seja, x não era capaz de se autoexibir na tela. O código completo seria: x = 0 Enquanto x < 10 x = x + 1 Fim Enquanto PosicionarCursor 0,0 Imprimir x Se fosse feita outra alteração no valor de x, você teria de executar novamente os comandos de impressão para que o valor fosse atualizado na tela. O ponto a que queremos chegar é que dados e códigos eram concebidos como elementos separados. Havia, inclusive, uma definição que dizia: dados + código = programa. Com a OOP, uma das idéias básicas era eliminar essa distância entre dados e código e fazer com que ambos ficassem mais interligados. Ambos seriam capazes de interagir de forma mais homogênea e autônoma. Primeiramente, expandiu-se a idéia de procedimento para a idéia de classe. Uma classe permite que vários procedimentos e dados sejam armazenados dentro dela. Os procedimentos passaram a chamar-se métodos e os dados passaram a chamar-se propriedades. Mas não foi uma mera maquiagem e uma mudança de nome para a mesma coisa. De fato, o conceito de classe mudou radicalmente a visão da programação. Uma classe define como um objeto deve funcionar. Fazendo uma analogia clássica, é como o projeto de uma casa: estabelece como as coisas têm de ser. A partir dessa planta, podem ser construídas várias casas idênticas. Isso é chamado de instância em OOP. Quando dizemos instanciar uma classe, significa colocar no ar um objeto baseado na descrição da classe. Vamos usar o próprio Windows como referência. Uma das coisas mais comuns na interface do Windows é o botão OK. Você provavelmente o verá na grande maioria das janelas que abrir. Observe que ao clicar com o mouse sobre aquele botão, ele produz um efeito de forma que parece realmente ter sido pressionado. 48

49 Porém, não existem apenas botões OK. Você encontra botões dos mais variados tipos nas mais diversas janelas. Na figura anterior, você nota que existem três botões idênticos, cada qual com um título diferente. Internamente, a propriedade que define o rótulo do botão é chamada de Text. Assim como existe Text, existem diversas outras propriedades. Uma delas é Color, que define a cor do botão; outra define se o botão está pressionado ou não. Resumindo, existem propriedades que definem diversos aspectos do botão. O grande detalhe é que, ao alterar uma propriedade, obtém-se um efeito imediato. Exemplificando em forma de código (fictício): BotaoOk.Pressionado = Verdadeiro Ou BotaoOk.Pressionar Ambos os códigos produzem um efeito imediato. Observe aqui duas coisas: primeiro, que a propriedade ou método vêm sempre atrelados a um objeto. Segundo, que se parece muito com a atribuição de uma variável no primeiro caso ou lembra meramente a execução de algum procedimento no segundo código. Você poderia também ter os códigos inversos: BotãoOk.Pressionado = Falso ou BotãoOk.Liberar A grande mágica em OOP é que propriedades podem disparar a execução de métodos e métodos podem alterar os valores de propriedades sem que você precise fazer nada para que isso aconteça ao manipular o objeto. Isso faz com que os objetos tenham vida própria. Os acadêmicos gostam de dizer que a OOP faz com que você programe moldando objetos muito parecidos com a realidade. Bom, acho isso um exagero. Mas concordo que os resultados que você vê são mais concretos, embora a programação por trás seja ainda mais abstrata do que a procedural. Em relação a programação procedural e orientada a objetos, é importante salientar que ambas não são inimigas e que a OOP não veio para aniquilar ninguém. Pelo contrário, a OOP abraça e expande o conceito de programação procedural para horizontes ainda mais amplos. 49

50 Conceitos de encapsulamento, herança e polimorfismo OK, objetos têm propriedades que podem ser manipuladas e gerar resultados visíveis e imediatos. Então vamos primeiramente entender a mecânica de funcionamento dos objetos. Como já dissemos, ao alterar o valor de uma propriedade, códigos são executados de forma a produzir um resultado visível. No exemplo do botão, qualquer modificação nas propriedades Color ou Text produzirão efeitos imediatos. Porém, ao usar um objeto, você não vê o código nem precisa conhecê-lo para criar um botão. Isto é chamado de encapsulamento.os códigos usados para alterar cores, títulos, forma e aspecto do botão ficam escondidos na implementação da classe. Também era possível encapsular funcionalidade dentro da programação procedural através da criação das chamadas bibliotecas de funções. Mas em OOP, esse conceito vai um pouco além. Vamos entender por quê. Suponha que você não está satisfeito e gostaria de criar botões redondos como os que você encontra no painel do Media Player do Windows, por exemplo. Você precisa conhecer mais dois conceitos para poder atingir esse resultado: Herança e Polimorfismo. Herança significa partir de algo já pronto e modificá-lo com o propósito de deixá-lo mais adequado a determinada finalidade. Supondo que você tem uma classe botão com propriedades básicas; você pode herdar aquelas características básicas e adicionar ainda mais funcionalidade.o detalhe é que, ao derivar uma classe a partir de outra, você não precisa conhecer o código da classe anterior. A sua nova classe não trará os códigos da classe pai. Eles continuarão encapsulados lá e você poderá usá-los se quiser.o dado importante é que você não precisa manipular os códigos da classe pai. Como a intenção seria criar um botão com características de funcionamento diferentes, muitas das propriedades anteriores passariam a funcionar de modo diferente. Observe à esquerda do painel do Media Player que existem botões com os títulos de Now Playing, Media Guide, CD Audio etc. É de se imaginar que exista uma propriedade Text para aquele tipo de botão também. Ou seja, vamos assumir neste caso que existe a propriedade Text para todos os botões do Windows. Mas por que alguns Texts são diferentes dos outros? Isso se chama Polimorfismo. Ou seja, cada novo descendente de uma classe pode entender a propriedade Text de uma forma diferente e aplicar seus próprios códigos de modo a redefinir seu comportamento. Resumindo, Herança, Polimorfismo e Encapsulamento são os três mecanismos básicos que uma linguagem deve comportar para ser considerada inteiramente orientada a objetos. 50

51 Orientação a eventos Um tópico que não deve ser confundido com orientação a objetos é a orientação a eventos. Uma linguagem de programação pode ser orientada a objetos sem ser orientada a eventos e vice-versa. A união desses dois conceitos, entretanto, produz resultados muito mais interessantes que os dois separadamente. Como o próprio nome sugere, uma linguagem orientada a eventos é uma linguagem capaz de responder a determinados acontecimentos dentro de um determinado ambiente. Os eventos podem ser muitos: o clique do mouse, uma tecla pressionada, uma informação que chega pela placa de rede etc. Em ambientes gráficos, isso tem uma importância essencial. O mouse, sem dúvida alguma, foi o dispositivo que mais causou reviravolta no mundo da programação orientada a eventos. No tempo das telas de texto, muito comuns no ambiente DOS, mainframes e versões mais antigas de Unix, o principal dispositivo de entrada de dados era o teclado. Vejamos um exemplo de programa com interface de texto: Numa tela como essa, se o usuário quisesse pular de um campo para o outro, teria de usar o teclado e necessariamente passar pelos campos dentro de uma determinada seqüência.como advento do mouse, passou a ser possível que o usuário se posicionasse em qualquer campo e houve uma quebra de estratégia. Nos tempos da tela de texto, era o programador quem dava as cartas e estabelecia a seqüência de operação de um programa. Hoje as coisas são diferentes, o programa tem de estar preparado para responder a seqüência de eventos que o usuário achar mais conveniente. Os sistemas operacionais também se tornaram multitarefa e várias ações podem estar acontecendo ao mesmo tempo. Programar com orientação a objetos combinada com orientação a eventos significa criar métodos que serão acionados quando determinadas situações ocorrerem. Geralmente, esses métodos têm nomes como Obj_Click (Obj_Clicar), Obj_KeyPress (Obj_PressionarTecla), assim facilitando sua identificação. Resumindo, o que 51

52 fazemos é posicionar estrategicamente um punhado de códigos de programação em pontos do programa que serão disparados em determinadas circunstâncias. A sensação que se tem é de que a programação ficou mais solta e mais descontrolada, mas ocorre exatamente o oposto. Implementação prática dos conceitos Vejamos agora, em termos de código, o que pode ser feito para criar classes em C#. Conforme já foi visto no módulo 2, C# é uma linguagem inteiramente orientada a objetos, de forma que tudo deve ser implementado dentro de classes. Não existem variáveis ou procedimentos soltos. Apenas para relembrar, o esqueleto básico de uma classe deverá ter mais ou menos o seguinte aspecto: escopo class NomeClasse // Propriedades escopo tipo nome; escopo tipo nome; // Construtores escopo NomeClasse // Especificações // Métodos escopo tipo NomeMétodo // Especificações 52

53 Evidentemente, esse exemplo está muito simplificado, mas traz a idéia básica: você tem de planejar quais serão as propriedades, os métodos, os construtores, destrutores e seus escopos e tipos. Exemplo: public class Cadastro // Propriedades public string CPF; public string NomeCliente; // Construtores public Cadastro( ) MessageBox.Show( "Eu sou o construtor 'default'!" ); public Cadastro( string fcpf, string fnome ) // Comandos de inicialização this.cpf = fcpf; this.nomecliente = fnome; MessageBox.Show( "Eu sou um construtor customizado e recebi " + fcpf + " e " + fnome + " como parâmetros." ); // Métodos public bool Gravou( ) 53

54 // Código para gravação return true; Em C#, a regra para definir um construtor é muito simples: basta criar um método cujo nome seja idêntico ao da classe. Toda vez que uma instância da classe for criada, o construtor será automaticamente disparado. Observe também que, no exemplo anterior, foram criados dois construtores para a mesma classe. Isso, em OOP, é chamado de sobrecarga (overload) de método. A palavra sobrecarga pode trazer a idéia de estresse ou excesso de trabalho, mas nesse caso é um elemento que nos ajuda e muito! Quando um método é sobrecarregado, o editor do Visual Studio dá uma indicação clara disso. Vamos tomar como exemplo o MessageBox. Ao digitar MessageBox.Show, o editor mostra que existem doze alternativas diferentes para o método Show: O que diferencia um do outro é a combinação do número de parâmetros, seus nomes e tipos. Isso é conhecido como assinatura do método. O compilador reconhecerá automaticamente qual assinatura você está usando. No caso da nossa classe, podemos escolher qual construtor será usado fornecendo a assinatura correta: // Construtor 'default' é chamado Cadastro Ficha1 = new Cadastro( ); // Construtor otimizado é chamado Cadastro Ficha2 = new Cadastro( "123", "De Oliveira Quatro" ); 54

55 Um detalhe importante é que criamos duas instâncias da mesma classe e ambas jamais se misturam. Outro detalhe é que o chamado construtor default, o qual não recebe nenhum parâmetro, existe em todas as classes. Porém, se você criar um novo construtor customizado com parâmetros, o construtor default é silenciosamente removido. No nosso exemplo, a reescrita do construtor default se tornou obrigatória a partir do momento em que quisemos usar a inicialização padrão de uma classe. Vamos agora entender os escopos (visibilidade) de uma classe e de seus membros. Uma propriedade (ou campo) ou método podem ser public, protected, private ou internal. Em C#, eles são chamados de modificadores de acesso. Veja os significados: Quando você cria um objeto, muitos de seus elementos são visíveis e outros estão escondidos. Fazendo uma comparação com o mundo real, quando usamos um carro, muitos de seus elementos (ou propriedades) são facilmente acessíveis enquanto outros permanecem mais bem-guardados. A velocidade, o nível do combustível, o câmbio, todos esses elementos são visíveis externamente. Outros permanecem mais escondidos e são usados indiretamente: a injeção eletrônica, as válvulas, os eixos de tração etc. Criar uma classe passa pela mesma idéia. Na verdade, a criação de uma classe lida com dois alvos: existe uma parte pensada no programador que usará a classe em seu sistema e outra pensada no usuário, que normalmente verá apenas a superfície do objeto criado. Veremos o uso desses modificadores com exemplos práticos e isso se tornará mais claro. 55

56 Herança e Agregação O trabalho de desenvolvimento de um único sistema pode resultar na criação e/ou utilização de dezenas ou mesmo centenas de classes. Muitas dessas classes têm funcionalidades muito distintas, mas outras se cruzam e se complementam. Por causa desses eventuais cruzamentos de classes, é fundamentalmente necessário entender o modo como elas se relacionam. Assim como na vida real com as mais diversas pessoas, duas classes podem se relacionar baseada no ser e no ter. No caso do ser, diz-se que uma classe foi derivada de outra e ambas têm uma relação de parentesco. Pelo outro lado, o ter especifica que uma classe incorporou outra e ambas têm uma relação de amizade. Vamos tomar um exemplo da vida real: como se constrói um computador? Existem muitas peças que formam uma máquina completa hoje em dia: processador, HD, monitor etc. Observe que a Intel produz novos processadores a partir dos preexistentes. A partir disso, nota-se uma linha genealógica: 8086, 286, 386, 486, Pentium, Pentium II e por aí vai. Cada novo processador herda as características da geração anterior e agrega novos recursos e mais potência. Então podemos dizer que temos uma classe onde cada novo processador é filho da geração anterior. Conclusão: todos eles SÃO processadores.o relacionamento entre eles é baseado em ser. Já um computador seria uma classe que agrega várias outras. Assim como o exemplo do processador, HDs, Impressora e tantos outros periféricos também têm sua linha evolutiva. A gente diz que um computador TEM memória, disco rígido etc. Ou seja, trata-se de uma classe que incorpora diversas outras.o relacionamento do computador com os demais elementos é do tipo ter. Fácil de entender na teoria, não é? Pois vejamos agora um pouco de código: class Processador public double Megahertz; public int AnoFabricacao; class Intel386 : Processador public Intel386( ) 56

57 Megahertz = 33.3; AnoFabricacao = 1993; class DiscoRigido public int CapacidadeGB; class Computador Intel386 MeuProcessador; DiscoRigido MeuHD; public Computador( ) MeuHD.CapacidadeGB = 70; No exemplo anterior, Intel386 é uma classe derivada a partir de Processador. DiscoRigido é uma classe independente e Computador também. Na classe Computador, são agregadas as classes DiscoRigido e Processador. Criação de Propriedades Vamos explorar agora um pouco mais as possibilidades de criação de propriedades. Os exemplos anteriores foram muito simples. Uma propriedade, é preciso entender em primeiro lugar, se parece muito com uma simples variável, mas é bem mais do que isso. Uma 57

58 propriedade (também chamada de atributo, dependendo da forma como foi definida) é um valor ao qual é associado um método. Toda vez que for lido ou gravado o valor da propriedade, métodos podem entrar em ação. Essas ações são definidas pelas palavras get e set.na prática, pode- se dizer que uma propriedade é composta de três elementos: um campo (local onde armazena-se o valor, também chamado de atributo), um método de leitura (get) e um método de gravação (set). Veja o exemplo da nossa classe Cadastro reescrita dentro dessas premissas: class Cadastro2 protected string fcpf; public string CPF set fcpf = value; get return fcpf; Como dissemos anteriormente, temos três elementos. As variáveis fcpf e fnome são os campos (fields) onde os valores são efetivamente armazenados. Observe que se trata de variáveis do tipo protected, o que significa que só serão vistas pelas classes descendentes (lembre-se do conceito de ser ) e não serão manipuladas por outras classes (lembre-se do conceito de ter ). O set e o get, como você pode notar, servem para recuperar e gravar novos valores. A palavra value é reservada no C# para receber o valor passado para a propriedade. Veja o exemplo: 58

59 InstanciaCadastro2.CPF = "123"; // Dispara o "set" x = InstanciaCadastro2.CPF; // dispara o "get" Para testar este código, sugerimos que você crie um projeto de teste bem simples, apenas um formulário com um botão e escreva o código dentro do evento click desse botão. Talvez você esteja se perguntando agora quem foi o maluco que resolveu complicar tanto a programação. Mas o fato é que isso, acredite ou não, torna as coisas mais fáceis. Se você tivesse de fazer com que um CPF fosse imediatamente validado ao ser atribuído, por exemplo, ficaria muito mais fácil dessa forma. Ou seja, assim que o valor fosse informado, a própria classe seria capaz de identificá-lo como válido ou não. No nosso estudo de caso, desenvolveremos um exemplo baseado nessa idéia.uma das coisas que você pode fazer com uma propriedade e não consegue com uma variável, por exemplo, é torná-la somente leitura ou somente gravação. No caso de ter uma propriedade somente leitura, implemente apenas o método get. Se implementar apenas o set, ela será apenas de escrita. No caso de não ser uma propriedade full e apenas um campo (atributo), a forma seria: public readonly string CampoSomenteLeitura Métodos polimórficos Vamos criar uma classe pensando em um método cuja implementação seria diferente na classe pai e na classe filha. Ou seja, a implementação da classe filha será ligeiramente diferente e melhorada em relação à versão pai. Nesse caso, toda vez que temos um método que se modifica da classe pai para filho, esse método é chamado de virtual. Em OOP, um método virtual se caracteriza pela capacidade do compilador de detectar mudanças de acordo com o contexto da classe e viabilizar o polimorfismo. Em bom português: é o método camaleão. Vejamos este trecho de código para clarear um pouco mais: class PrimeiraGeracao 59

60 public virtual void Mensagem( string msg ) msg += " Primeira Geração "; MessageBox.Show( msg ); class SegundaGeracao : PrimeiraGeracao public override void Mensagem( string msg ) msg += " Segunda Geração "; base.mensagem( msg ); class TerceiraGeracao : SegundaGeracao public override void Mensagem( string msg ) msg += " Terceira Geração "; base.mensagem( msg ); 60

61 Observe que na primeira geração, o método Mensagem é definido como virtual. Nas duas gerações posteriores, ele é definido como override. Dentro de cada método override, observe a presença da palavra-chave base. Ela é essencial para permitir que o polimorfismo aconteça. Sua finalidade é acionar a codificação escrita na classe pai (o nível imediatamente anterior). Apenas a Primeira Geração gera uma saída na tela. As outras classes apenas agregam mais informação à mensagem final. A terceira passa para segunda, que passa para a primeira, que efetivamente imprime. Exemplo de utilização: TerceiraGeracao teste = new TerceiraGeracao( ); teste.mensagem( "Mecanismo de Herança: " ); A grande vantagem por trás disso tudo é que ao gerar uma nova versão do método, você não precisa necessariamente conhecer o código da classe pai para fazer a nova implementação. Se quiser, pode até mesmo descartar o que foi escrito anteriormente, basta não incluir a chamada através da palavra- chave base. Existe também uma outra palavra-chave bastante importante nesse processo de herança e polimorfismo. Essa palavra é this. A palavra this refere-se sempre ao contexto atual. Na grande maioria dos casos, a palavra this pode ser omitida. Mas quando existem coincidências entre nomes de variáveis ou parâmetros com campos ou propriedades de uma classe, é conveniente usar this: class ContextoPai public string Nome; // this.nome refere-se a este item public ContextoPai( string Nome ) this.nome = Nome; Apenas para traçar um paralelo, o this em C# seria idêntico ao this em C++ e Java, idêntico ao me em Visual Basic e idêntico ao self em Delphi. 61

62 Um pouco de Concretismo e Abstracionismo Bom, vamos dar alguns exemplos mais avançados de como criar métodos em classes. Uma das coisas que mais massacram as almas dos programadores estabanados, quando eles se deparam com OOP, é a necessidade primordial de planejamento. Muita gente simplesmente senta na cadeira e começa a escrever, gerando um código que muitas vezes é complicado de entender e dar manutenção. Para quem vai desenvolver classes, um mínimo de planejamento é absolutamente indispensável no início. É como jogar xadrez. Se você não consegue pensar nos lances seguintes, o xeque-mate (e neste caso o seu rei será o sacrificado) pode aparecer de uma hora para outra. Baseado nessas premissas, não é exagero dizer que a OOP requer um nível muito alto de abstração por parte do programador. Um nível de abstração tão alto que ele pode simplesmente criar uma classe completamente vazia, oca, apenas para definir como será o seu formato final ou de seus descendentes. O C# suporta abstração em classes através de dois mecanismos: criação de classes e métodos abstratos e interfaces. Uma classe abstrata, como o próprio nome sugere, não traz uma implementação concreta. Ela serve para dar forma a um projeto de classe. Veja o código: abstract class EntradaDeDados public abstract string Conteudo( ); public abstract string Exibir( ); Normalmente, toda entrada de dados terá um conteúdo, o qual pode eventualmente ser exibido. Isso é uma premissa. Criar uma classe abstrata significa definir premissas. Nada é codificado concretamente na primeira geração da classe. As classes filhas (através de override) é que definirão a funcionalidade de cada método ou propriedade. Se você tentar instanciar uma classe abstrata, obterá um erro do compilador: EntradaDeDados x = new EntradaDeDados( ); _ Cannot create an instance of the abstract class or interface 'EntradaDeDados' 62

63 Na classe filha, você teria as implementações: class EntradaDeOcorrencias : EntradaDeDados public override string Conteudo( ) 81 // Implementação return ""; public override string Exibir( ) // Implementação return ""; Interfaces O recurso de criação de interfaces segue mais ou menos o mesmo princípio dos métodos abstratos: apenas define o formato de uma classe sem implementar seu código. Porém, há uma característica que torna as interfaces bastante diferentes de simples classes abstratas: elas fornecem subsídio para a criação de novas classes numa forma mais parecida com a montagem de um quebra-cabeça. O C# não suporta herança múltipla. Isso significa que uma classe filha só pode ter um única classe como pai. Interfaces permitem criar algo parecido com herança múltipla em C++. Por definição, em OOP, Interfaces são coleções de métodos abstratos relacionados semanticamente. Em bom português: peças de um quebra-cabeça que podem ser encaixadas conforme a conveniência de quem estiver jogando... Observe que, para efeito de padronização, é comum identificar os nomes das interfaces com I maiúsculo no início. Vamos a um exemplo: public interface ICodigoBarras 63

64 void LeituraPadrao3of9( ); // Implicitamente abstrato void LeituraPadraoEAN13( ); void MetodoIdentico( ); public interface IControleArmazenamento void Localizador( ); void Categorizacao( ); void MetodoIdentico( ); public class Produto : ICodigoBarras, IControleArmazenamento // Aqui viriam as implementações public void LeituraPadrao3of9( ) // Implementação public void LeituraPadraoEAN13( ) // Implementação public void Localizador( ) // Implementação 64

65 public void Categorizacao( ) // Implementação // No caso de nomes coincidentes, implemente apenas uma vez public void MetodoIdentico( ) // Implementação A definição da classe produto seria resultante da agregação de métodos definidos em duas interfaces diferentes. Você também pode agregar outros detalhes pertinentes à classe produto. Também pode criar novas classes baseadas em uma classe pai combinada com várias interfaces: public class Produto : Cadastro, ICodigoBarras, IcontroleArmazenamento Selando as classes Para selar este assunto de criação de classes com chave de ouro, a linguagem C# permite criar classes seladas. Por definição, classes seladas não permitem nenhum tipo de herança ou derivação. Simplesmente são classes que devem ser entendidas como terminadas. Exemplo de código de classe selada:, sealed class FimDePapo public string UltimaPalavra; 65

66 class AindaQueroMaisPapo : FimDePapo // Erro de compilação: // cannot inherit from sealed class 'FimDePapo' Ferramentas de apoio Se você se empolgar com a criação de objetos e de repente se vir às voltas com mil e uma classes, existem algumas ferramentas no editor do Visual Studio que tornarão a sua vida mais fácil. Para ter uma visão global dos objetos criados dentro da sua aplicação, clique com o botão direito do mouse dentro do editor e selecione Synchronize Class View. Você verá no canto superior direito da sua tela (essa posição pode variar) uma janela com todas as definições de classes, mais ou menos com o seguinte formato: 66

67 Ao clicar duas vezes sobre um método, propriedade ou classe, o editor posicionará o cursor dentro do código correspondente. Uma vez dentro do código, se não estiver interessado em visualizar o código de classes que considera que já esteja corretamente implementados, você pode usar os sinais de + e que ficam no canto da tela e contrair ou expandir os códigos das classes. Veja o exemplo com a classe Processador contraída, exibida na Figura 3.7. Tempo de vida dos objetos Até agora, temos falado de criar objetos, mas também é igualmente importante saber como e quando destruí-los. Vimos que para criar uma nova instância de uma classe basta usar a palavra new: x = new ClasseExemplo( ) O próprio runtime de.net vai se encarregar de destruir o objeto quando ele não for mais necessário. A pergunta é: como ele sabe que um objeto não é mais necessário? Resposta simples e incompleta: o runtime libera a memória alocada pelo objeto quando não existe mais nenhuma referência ligada ao objeto dentro do contexto corrente. Exemplo: public static int Main( ) QualquerClasse x = new QualquerClasse( );... Return 0; // se x é a única referência para "QualquerClasse" // ela pode ser destruída quando termina seu escopo 67

68 Existem diversos aspectos referentes a Garbage Collection (coleta de lixo) que estão fora do escopo deste curso. Vamos nos deter em mostrar como programar a destruição de um objeto. É muito comum necessitarmos que determinados processos ocorram quando um objeto é finalizado. Os exemplos são muitos: liberação de recursos alocados como impressora ou porta serial, fechamento de arquivos etc. Assim como temos em C# os construtores, também temos os destrutores. Lembre-se de que a regra para a criação de um construtor é muito simples: basta criar um método com o mesmo nome da classe. No caso do destrutor, basta também criar um método com o mesmo nome da classe, mas precedido por um til (~). Exemplo: class Teste ~Teste( ) // Aqui você escreve o código de liberação de recursos // Base.Finalize( ) é chamado automaticamente em C# 68

69 Evidentemente, se você achar conveniente que a liberação de recursos seja feita em algum momento que não necessariamente seja o da destruição do objeto, você é inteiramente livre para criar algum método que faça isso. Tratamento de exceções O tradicional termo tratamento de erros é agora chamado de tratamento de exceções. E veremos que faz mais sentido. Em C#, o tratamento de exceções é feito de maneira muito elegante e simples.o C# adota um estilo relativamente comum em outras linguagens, que é o de tratar erros como objetos que encapsulam todas as informações que necessitamos para resolvê-lo. Essa idéia é válida para todo o ambiente.net e foi batizada como SEH (Structured Exception Handling). A idéia básica é mais ou menos a seguinte: todo objeto que representa uma exceção é derivado de System.Exception. Essa classe possui os seguintes membros: Exceções podem ser disparadas pelos mais diversos elementos. Podem ser disparadas a partir de erros do sistema operacional, de erros de dispositivos, de inconsistências de dados. Também podemos criar nossas próprias exceções. Vamos observar um exemplo de como disparar uma exceção e como tratá-la com a nossa classe de Cadastramento e validação do CPF: 69

70 public class Cadastro // Propriedades public string CPF; public string NomeCliente; public Cadastro( string fcpf, string fnome ) // Inicialização CPF = fcpf; NomeCliente = fnome; if ( CPF.Length!= 11 ) // THROW é a palavra chave para gerar a exceção throw new Exception( "CPF Inválido" ); Colocamos uma validação no construtor, de forma que se forem passados menos de 11 caracteres, o CPF é automaticamente considerado incorreto. Ao instanciar essa classe com um parâmetro inválido, a classe irá disparar a exceção e o resultado na tela deverá ser uma tela similar a esta: 70

71 Observe que um dos detalhes importantes está na sentença unhandled exception. Traduzindo: exceção não-tratada. A exceção foi disparada pela palavra chave throw e é preciso que haja um bloco de código preparado para manipular a classe de erro retornada.o formato de tratamento de uma exceção é o seguinte: try // Código sujeito a exceções catch( TipoExcecao1 e ) // Tratamento para exceção tipo 1 catch( TipoExcecao2 e ) // Tratamento para exceção tipo 2 catch // Tratamento para qualquer tipo de exceção 71

72 finally // Trecho que deve sempre ser executado, havendo ou não exceção A estrutura try..catch requer que exista pelo menos um bloco catch vazio. Os blocos de finally e catch(exception) são opcionais. Nossa classe Cadastro deveria ser instanciada da seguinte forma: try Cadastro teste = new Cadastro( "123", "De Oliveira Quatro" ); catch MessageBox.Show( "Impossível instanciar o objeto Cadastro" ); Como você deve ter observado no exemplo, entretanto, não existe uma pista clara de qual foi o motivo que realmente fez a instanciação do objeto. Para termos um controle mais efetivo, poderíamos usar o catch com uma exceção customizada. Vamos criar uma exceção que será usada especificamente para o caso de encontrar um CPF inválido e colocar isso dentro de um contexto com mais outras possibilidades de erro. O esboço do código ficaria desta forma: // Criação das classes public class ecpfinvalido : Exception public class Cadastro // Campos public string CPF; 72

73 public string NomeCliente; public Cadastro( string fcpf, string fnome ) // Inicialização NomeCliente = fnome; if ( CPF.Length!= 11 ) throw new ecpfinvalido( ); else CPF = fcpf; // Código que irá testar o tratamento de exceções // Insira-o dentro do evento click de um botão, // por exemplo try int x; int z = 0; Cadastro teste = new Cadastro( "123", "De Oliveira Quatro" ); x = 3 / z; // Teste pôr esta linha antes da anterior catch( ecpfinvalido Erro ) // Experimente inverter a ordem dos catches 73

74 MessageBox.Show( "CPF Inválido" ); catch( Exception Erro ) MessageBox.Show( "Impossível instanciar o objeto Cadastro: " + Erro.Message ); finally MessageBox.Show( "Sempre executado, haja erro ou não." ); Observe uma série de detalhes pertinentes ao exemplo anterior: O catch( Exception Erro) é o trecho que captura toda e qualquer exceção. Ele é praticamente igual a um catch vazio conforme demonstrado antes, por uma razão muito simples: Exception é pai de todas as exceções. Qualquer exceção sempre se encaixará em Exception por causa disso. A razão pela qual usamos Exception em vez de um catch vazio foi a intenção de exibir a mensagem enviada pelo sistema na ocorrência do erro. O bloco finally é executado sempre, haja erro ou não. Neste caso, ele é executado DEPOIS do bloco catch que capturar a exceção. Se você tem o costume de programar em Delphi, vai notar que essa ordem é invertida em C#. Qualquer erro ocorrido dentro um bloco try desvia o fluxo de execução para o catch correspondente e NÃO retorna o fluxo de execução para o ponto que originou o erro ou a linha seguinte. Em outras palavras, não existe nada semelhante ao Resume, tão popular no VB, por exemplo. A ordem dos fatores altera (e muito) os resultados. Se você tentar, por exemplo, as inversões sugeridas pelos comentários no exemplo anterior, vai perceber que, no caso de alterar a ordem dos catches, você receberá um erro do compilador: A previous catch clause already catches all exceptions of this or a super type ( System.Exception ) (Uma cláusula catch anterior já captura todas as exceções deste tipo ou de um tipo superior System.Exception ). No caso de inverter as linhas de código, você vai fazer com que diferentes catches sejam executados. 74

75 Apenas um e somente um bloco catch é executado para cada tratamento de exceção (try). No nosso estudo de caso, também daremos seguimento a este assunto e desenvolveremos controles de exceções mais sofisticados. Conversão de tipos (Typecasting) Quase todas as linguagens de programação possuem recursos para compatibilização de dados. No caso da OOP, isso é um tópico que requer um pouco mais de cuidados do que uma simples conversão de números em strings e vice-versa. Em muitos casos, um objeto pode ser passado como parâmetro e um método pode estar habilitado a lidar com classes bastante diferentes. Primeiro vamos examinar em um sistema de herança linear, baseado no conceito de ser : Eis aqui agora um diagrama demonstrando o conceito de ter : 75

76 A pergunta-chave para explicar o tópico de type cast de objetos seria: como posso criar um método que seja capaz de receber um objeto como parâmetro, não importa qual seja e, sabendo que alguns desses objetos têm o método gravar e outros não, por exemplo, como fazer para que meu código seja inteligente o suficiente para saber com qual objeto está lidando e realizar a ação da maneira mais adequada? Ok, vamos por partes. Seja qual for o caso, teremos de fazer uso de dois operadores de typecast: is e as.o operador is permite que você verifique se o objeto é de um tipo específico e retorna verdadeiro ou falso, de acordo com o resultado do teste. Exemplo: if ( p is Intel286 ) // instruções Já o operador as permite usar uma classe como se ela fosse outra. Evidentemente, esse tipo de personalidade trocada pode dar confusão e deve ser usada com cuidado. Como regra geral, podemos dizer que quanto mais próximo for o parentesco entre duas classes, maiores as chances de ter um typecast correto. Quanto mais distante, maior a possibilidade de erros no seu typecast. Mas lembre- se que parentes próximos também podem brigar, portanto é mais do que conveniente planejar bem um typecast! Veja um exemplo: (p as Intel286).ModoProtegido = true; Nesse caso, estamos fazendo um typecast no objeto p para usá-lo como um processador Intel286. Se o typecast falhar, um objeto com valor nulo será retornado e uma exceção será gerada. Vamos analisar os dois casos ilustrados no início deste tópico. O primeiro caso seria mais simples, por se tratar de herança linear pura e simples. Bastaria criar um método que recebesse como parâmetro a classe mais superior, no caso, a classe Processador. Veja o código: class Processador public double Megahertz; 76

77 public int AnoFabricacao; class Intel8086 : Processador public Intel8086( ) Megahertz = 4.77; AnoFabricacao = 1981; class Intel286 : Intel8086 public bool ModoProtegido = false; public Intel286( ) Megahertz = 20.0; AnoFabricacao = 1984; Observe que a partir da geração do 286, foi adicionado um novo campo indicando que o processador dispõe de um recurso chamado Modo Protegido e cujo valor padrão é false. Caso queiramos ativar o modo protegido de um processador através de uma classe externa, poderíamos escrever uma classe com o seguinte formato: class VerificarModoProtegido public void AtivarModoProtegido( Processador p ) 77

78 if ( p is Intel286 ) // observe o type cast nesta linha: (p as Intel286).ModoProtegido = true; MessageBox.Show( "Modo protegido foi ativado" ); if ( p is Intel8086 ) MessageBox.Show( "Modo protegido não disponível" ); Vamos agora escrever um código que acionaria tudo de vez. Observe que esse código possui um truque : Intel8086 p8086 = new Intel8086( ); Intel386 p386 = new Intel386( ); VerificarModoProtegido Modo = new VerificarModoProtegido( ); // É fácil prever a saída desta linha: Modo.AtivarModoProtegido( p8086 ); // Mas o que você acha que vai acontecer nesta aqui? Modo.AtivarModoProtegido( p386 ); A primeira linha, obviamente, responderá que o processador não possui modo protegido. Porém, já que nossa classe prevê apenas processadores 8086 e 286, como ela irá se comportar recebendo como parâmetro um 386? Resposta: ela acionará ambos os ifs. Ou seja, ela 78

79 ativará o modo protegido, informará que o mesmo foi ativado e logo em seguida dirá que o processador não possui modo protegido! Nossa classe anterior, portanto, teria de ser reescrita e ficaria mais consistente desta forma: class VerificarModoProtegido public void AtivarModoProtegido( Processador p ) if ( p is Intel286 ) // observe o type cast nesta linha: (p as Intel286).ModoProtegido = true; MessageBox.Show( "Modo protegido foi desativado" ); else if ( p is Intel8086 ) MessageBox.Show( "Modo protegido não disponível" ); Você conseguiu enxergar a diferença? Todo e qualquer detalhe em programação pode ser crucial! É muito fácil deixar bugs no código... Agora que sabemos como tratar objetos em herança linear, como proceder em relação a objetos que não necessariamente têm parentesco entre si? Eis aqui o grande detalhe: todos os objetos têm parentesco, sim. Todos eles são filhos de System.Object. Não precisa fazer exame de DNA, pode acreditar nisso! Veja este exemplo de código: 79

80 public void QualquerObjeto( System.Object o ) // Diferentes comparações e typecasts podem ser usados Resumindo, o mesmo raciocínio aplicado a herança linear também se aplica a objetos não lineares; afinal, todos os objetos são descendentes de um mesmo ramo. Basta que o parâmetro que receberá os objetos seja definido como System.Object. Resumo Neste módulo você foi exposto a uma série de conceitos e técnicas. Dominar a Programação Orientada a Objetos dentro dos atuais ambientes de desenvolvimento é absolutamente essencial. Você aprendeu todos os conceitos essenciais de OOP (Polimorfismo, Encapsulamento, Herança) e viu de que forma eles são implementados e como se aplicam em C#. Aprendeu também a diferença entre orientação a eventos e orientação a objetos. Vimos também como construir classes, métodos e propriedades. Outras informações importantes como tratamento de exceções, interfaces, e type casting completaram o repertório básico de informações sobre OOP de que você precisa para programar de maneira consistente nessa tecnologia. 80

81 Unidade 7 Segurança em Aplicações.NET O Common Language Runtime e o Framework.NET fornecem muitas classes e serviços que permitem aos programadores escrever código para aplicações seguras. Esses componentes permitem aos administradores customizar o acesso que a aplicação terá a recursos protegidos. O framework também fornece classes e serviços que facilitam o uso de criptografia e segurança por definição de papéis de usuário. Utilização de Strong Names Strong Name é uma tecnologia baseada em criptografia introduzida pela plataforma.net e traz consigo muitas possibilidades para as aplicações.net. Uma delas é o aumento da segurança no desenvolvimento de aplicações. Imagine que você precise criar um conjunto de componentes que gerenciam a área de recursos humanos de uma determinada empresa. Entre esses componentes, vamos ter um chamado Salario, que dado o nome do funcionário, valor base do salário e a quantidade de horas extras que o funcionário realizou no mês, retorná o valor líquido que a empresa deverá pagar a ele. Para ilustrar isso, temos um projeto do tipo Class Library, chamado de RegrasDeNegocio. Dentro deste projeto, criamos uma classe chamada Salario, que possuirá apenas o método chamado de Calcular, que receberá os parâmetros mencionados acima. Traduzindo tudo isso em código, teremos algo como: public class Salario public decimal Calcular(string nomedofuncionario, decimal valorbase, decimal horasextras) return valorbase + horasextras; Note que não há nenhuma complexidade envolvida para não desviarmos o foco. Como sabemos, este projeto dará origem à uma DLL, que poderá ser utilizada por várias aplicações que rodam dentro da empresa. Como já era de se esperar, vamos referenciá-la em um projeto chamado AplicacaoDeRH, que utilizará esse componente recém criado para calcular os salários de seus respectivos funcionários. Com isso, o código de consumo na aplicação final 81

82 é algo parecido com isso: Console.WriteLine(new Salario().Calcular("Julio Cesar", M, M)); Dá mesma forma que antes, vamos manter a simplicidade aqui. Depois deste software (EXE + DLL) instalado na máquina do responsável pelo RH da empresa, eu chego até o diretório físico onde ele está instalado. Copio esses dois arquivos para minha máquina para começar a analisar como esse componente e aplicação foram desenvolvidos. Como sabemos, dentro de qualquer assembly.net, temos apenas código IL, que é um código ainda decompilável. Podemos utilizar o Reflector para isso e, consequentemente, visualizar tudo o que eles possuem (classes, métodos, parâmetros, etc.). A partir de agora, vamos explorar a vulnerabilidade. Como eu conheço toda a estrutura que o componente (DLL) tem, nada impede de eu criar um projeto no Visual Studio.NET, com o mesmo nome, com os mesmos tipos e os mesmos parâmetros. Com isso, eu vou manipular o corpo do método Calcular, verificando se o funcionário que está sendo calculado o salário sou eu, e se for, multiplico a quantidade de horas extras por 2, para que eu possa ganhar um valor maior do que realmente deveria. public class Salario public decimal Calcular(string nomedofuncionario, decimal valorbase, decimal horasextras) if (nomedofuncionario == "Julio Cesar") horasextras *= 2; return valorbase + horasextras; Depois de compilado, isso dará origem à uma - nova - DLL com o mesmo nome. De alguma forma, eu chego até o computador do responsável pelo RH da empresa, e substituo fisicamente a DLL anterior por essa DLL que acabamos de desenvolver, e que viola a regra de negócio, pois manipula o resultado para beneficiar um funcionário específico. Com isso, quando o responsável pelo RH for calcular o meu salário, ele me pagará duas vezes o valor das minhas horas extras. Se ele confia cegamente no software que dá o resultado, estou sendo beneficiado, a empresa prejudicada e dificilmente alguém encontrará o problema. A importância do StrongName Todo e qualquer assembly possui algumas características que ajudam ao runtime determinar a sua identidade. A identidade de qualquer assembly.net é composta por quatro 82

83 informações, a saber: nome, versão, cultura e uma chave pública. O nome nada mais é que o nome do assembly, desconsiderando a sua extensão. A versão é o número em que o projeto se encontra, e que por padrão é 1.0. Já a cultura determina se o assembly é sensitivo à alguma cultura e, finalmente, a chave pública, qual falaremos mais adiante. Podemos utilizar várias ferramentas para conseguir visualizar essas informações. No nosso caso, se abrirmos dentro do Reflector o componente que criamos inicialmente, aquele que possui o código legal, poderemos comprovar essas características que ajudam a identificar o assembly: RegrasDeNegocio, Version= , Culture=neutral, PublicKeyToken=null Quando criamos a assembly ilegal, com o código que multiplica a quantidade de horas extras por dois, poderemos notar que o resultado será idêntico, ou seja, não há nada que diferencie a identidade dos dois assemblies. Sendo assim, a substituição física é o suficiente para comprometer a regra de cálculo de salário, já que para a aplicação que a consome, acaba sendo o mesmo componente. Se repararmos melhor, entre as quatro informações que compõem a identidade do assembly, uma delas é chamada de PublicKeyToken, e que está nula (não definida). É justamente nela que está a solução para o nosso problema. Dentro do.net Framework existem dois tipos de assemblies: os que são fracamente nomeados e os que são fortemente nomeados. Aqueles que são fracamente nomeados (que é o padrão para todos os projetos.net), são estruturalmente idênticos, possuindo o mesmo formato e os mesmos tipos definidos, mas como está, dá margem para esse tipo de problema. Isso acontece porque quando efetuamos a referência do componente RegrasDeNegocio.dll na aplicação AplicacaoDeRH.exe, o.net injeta no manifesto da AplicacaoDeRH, informações pertinentes ao assembly de regras de negócio. Se analisarmos o manifesto do EXE, veremos a seguinte informação: 83

84 Na imagem acima, podemos verificar que dentro da AplicacaoDeRH há uma referência para o componente RegrasDeNegocio, que inclui o nome e a versão dele. Como até então o componente ilegal possui a mesma identidade, a aplicação consome ele sem maiores problemas, não sabendo que se trata de um componente malicioso. Para resolver o nosso problema, vamos recorrer aos assemblies fortemente nomeados (strong names). A única e principal diferença em relações aos assemblies fracamente nomeados, é a atribuição de uma chave única, que não se repetirá em nenhum lugar do mundo. A Microsoft criou esse recurso, desde a primeira versão do.net Framework, que utiliza um par de chaves (pública e privada) para garantir a unicidade do assembly. Antes de ver como elas funcionam, vamos primeiramente entender como gerá-la. O.NET Framework fornece uma ferramenta chamada SN.exe, que é responsável por gerar e manipular essas chaves. Para gerar a nossa chave, podemos executar o seguinte comando (através do prompt do Visual Studio.NET): SN -k MinhasChaves.snk O arquivo gerado possui as duas chaves, a pública e a privada e você pode nomear o arquivo da forma que quiser. Com o par de chaves gerado, podemos criar um segundo arquivo para acomodar somente a chave pública, mas em um primeiro momento, isso é desnecessário. A ideia aqui é somente visualizarmos o que temos como chave pública: SN -p MinhasChaves.snk MinhaChavePublica.snk Para visualizarmos a chave pública, podemos utilizar o seguinte comando: SN -tp MinhaChavePublica.snk Public key is f1589e575d9c20 cc36a0fb7245d74c8d69ddc26a0c92ebee5e65dba7c94a cc5a8f d795e11d7e366c49 a19f3ae28509fa8961e6eca103353fe98168a402dc35001b98d9d5325f6121 bde11bc698f268a3 e7e338b950b565be26e371c2550dfaee54f9ef8993dc476f60b2ab5ad69d5a e832ddd7e35e43ad 6daafae2 Public key token is 0b8510fcd7fd739a Só que o arquivo snk por si só não funciona. Você precisa vinculá-lo ao assembly qual deseja assinar. Para isso, você pode abrir o arquivo AssemblyInfo.cs, e adicionar o atributo AssemblyKeyFileAttribute, que recebe o caminho físico até o arquivo que contém o par de chaves, e que no nosso exemplo é MinhasChaves.snk. [assembly: Ao compilar o assembly com a chave vinculada, veremos que a identidade do assembly já mudará. Ao vincular a chave criada acima no nosso componente RegrasDeNegocio, a identidade irá aparecer da seguinte forma: 84

85 RegrasDeNegocio, Version= , Culture=neutral, PublicKeyToken=0b8510fcd7fd739a A única e essencial diferença é que agora a propriedade PublicKeyToken reflete exatamente a nossa chave pública, que está contida no arquivo MinhasChaves.snk vinculado ao componente. A partir de agora, as aplicações que referenciarem o componente RegrasDeNegocio, guardarão além do nome e versão do mesmo, a chave pública que o identifica. Depois dessas alterações, se visualizarmos o manifesto da aplicação AplicacaoDeRH, teremos o seguinte resultado: Com isso, qualquer pessoa maliciosa que tente refazer o assembly, por mais que ela se atente a criar toda a estrutura de tipos e métodos, definir o mesmo nome de assembly, e ainda, assinar com um outro strong name, ela jamais conseguirá reproduzir a mesma identidade e, consequentemente, não conseguirá mais alterar o componente que está instalado no cliente. É importante dizer que fisicamente, a substituição ainda poderá ocorrer, mas quando a aplicacação AplicacaoDeRH tentar acessar algum recurso do assembly RegrasDeNegocio, uma exceção será disparada, informando que o assembly solicitado não corresponde aquele que foi inicialmente referenciado. Observação: Toda essa segurança pode continuar vulnerável se você deixar o arquivo com a chave privada em mãos erradas. Se a pessoa maliciosa conseguir ter acesso a esse arquivo, ela irá gerar o assembly idêntico como ela já fazia, mas ao invés de criar um novo par de chaves para assinar o assembly, ela utilizará o mesmo que você utilizou para assinar o seu, que é o verdadeiro, e com isso todo o problema volta a acontecer. Para finalizar, vamos entender como todo esse mecanismo funciona e como o runtime do.net Framework assegura isso. Quando geramos a chave a partir do utilitário SN.exe, um par de chaves é adicionado no arquivo MinhasChaves.snk. Quando compilamos o projeto com esse arquivo vinculado a ele, o.net gera um hash do componente utilizando o algoritmo SHA1 e assina esse hash com a chave privada. O resultado deste processo é adicionado no próprio assembly, incluindo também a sua chave pública, que está matematicamente relacionada à chave privada. A imagem abaixo ilustra esse processo: 85

86 Como vimos acima, quando o componente é referenciado na aplicação que o utiliza, a chave pública também é adicionada à aplicação. Durante a execução, o.net Framework irá aplicar o mesmo algoritmo de hash no conteúdo do componente (DLL) e dará origem à um novo hash e a chave pública embutida na aplicação que consome aquele componente, será utilizada para extrair o conteúdo (já "hasheado") que está embutido na DLL do componente. Para determinar se a DLL é a mesma ou não, o resultado do hash deve ser igual, do contrário, a DLL foi substituída e, felizmente, uma exceção será disparada, evitando assim de consumir um componente ilegal. A imagem abaixo ilustra esse processo: Ao assinar uma aplicação/componente com um strong name, podemos tirar proveito de várias funcionalidades, como por exemplo, o refinamento de segurança, a instalação no GAC, que por sua vez possibilita a centralização, execução lado a lado de múltiplas versões de um mesmo componente, etc. Mas um dos principais benefícios fornecidos por ele, é a unicidade do componente, evitando que alguém consiga reproduzí-lo e, consequentemente, colocar em risco a execução e a confiabilidade das aplicações que a consomem. SQL Injection A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. A injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação. Para nos prevenirmos contra esse tipo de ataque, o ASP.NET fornece o objeto SqlCommand, junto com a estrutura SqlParameter. Juntos, eles fazem a validação e ajustes nos dados que o usuário envia e que venham a compor o comando SQL. Exemplo de utilização: 86

Fundament n os s da platafo f rm r a. NE N T André Menegassi

Fundament n os s da platafo f rm r a. NE N T André Menegassi Fundamentos da plataforma.net André Menegassi O que é o.net Framework?.NET é uma plataforma de software para desenvolvimento de aplicações que conecta informações, sistemas, pessoas e dispositivos através

Leia mais

19/05/2009. Módulo 1

19/05/2009. Módulo 1 ASP.NET Módulo 1 Objetivo Mostrar os conceitos fundamentais da plataforma Microsoft.Net e suas ferramentas; Apresentar os conceitos fundamentais de aplicações web e seus elementos; Demonstrar de forma

Leia mais

Microsoft Visual Studio Express 2012 for Windows Desktop

Microsoft Visual Studio Express 2012 for Windows Desktop Microsoft Visual Studio Express 2012 for Windows Desktop Apresentação da ferramenta Professor: Danilo Giacobo Página pessoal: www.danilogiacobo.eti.br E-mail: danilogiacobo@gmail.com 1 Introdução Visual

Leia mais

Introdução ao C# . Visão geral do.net Framework

Introdução ao C# . Visão geral do.net Framework Introdução ao C# Microsoft.NET (comumente conhecido por.net Framework - em inglês: dotnet) é uma iniciativa da empresa Microsoft, que visa uma plataforma única para desenvolvimento e execução de sistemas

Leia mais

ASP.NET. Guia do Desenvolvedor. Felipe Cembranelli. Novatec Editora. www.novateceditora.com.br

ASP.NET. Guia do Desenvolvedor. Felipe Cembranelli. Novatec Editora. www.novateceditora.com.br ASP.NET Guia do Desenvolvedor Felipe Cembranelli Novatec Editora www.novateceditora.com.br 1 Introdução à plataforma.net A plataforma Microsoft.NET.NET é uma nova plataforma de software para desenvolvimento

Leia mais

A interface do Microsoft Visual Studio 2005

A interface do Microsoft Visual Studio 2005 Tarefa Orientada 1 A interface do Microsoft Visual Studio 2005 Objectivos: Introdução à framework.net Iniciar o Visual Studio 2005. Criar um novo projecto de Windows Forms em Visual Basic Introdução à

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 3

Conhecendo o Visual FoxPro 8.0 Parte 3 AULA Conhecendo o Visual FoxPro 8.0 Parte 3 Continuando nossa saga pelas ferramentas do Visual FoxPro 8.0, hoje vamos conhecer mais algumas. A Ferramenta Class Designer A Class Designer é a ferramenta

Leia mais

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C#

Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C# Linguagem de Programação 3 Framework.NET, Microsoft Visual C# 2010 Express e Elementos da Linguagem C# Prof. Mauro Lopes 1-31 35 Objetivos Nesta aula iremos apresentar a tecnologia.net, o ambiente de desenvolvimento

Leia mais

Delphi 7 Aula 01 Área do Triângulo

Delphi 7 Aula 01 Área do Triângulo Delphi 7 Aula 01 Área do Triângulo Prof. Gilbert Azevedo da Silva I. Objetivos Conhecer o Ambiente Integrado de Desenvolvimento (IDE) do Delphi 7, Desenvolver a primeira aplicação no Delphi 7, Aprender

Leia mais

O Primeiro Programa em Visual Studio.net

O Primeiro Programa em Visual Studio.net O Primeiro Programa em Visual Studio.net Já examinamos o primeiro programa escrito em C que servirá de ponto de partida para todos os demais exemplos e exercícios do curso. Agora, aprenderemos como utilizar

Leia mais

Informática para Gestão de Negócios Linguagem de Programação III. Prof. Me. Henrique Dezani dezani@fatecriopreto.edu.br. Agenda

Informática para Gestão de Negócios Linguagem de Programação III. Prof. Me. Henrique Dezani dezani@fatecriopreto.edu.br. Agenda Informática para Gestão de Negócios Linguagem de Programação III Prof. Me. Henrique Dezani dezani@fatecriopreto.edu.br Professor Apresentação Agenda Ementa, Objetivo, Conteúdo Programático, Bibliografia,

Leia mais

CONHECENDO O VISUAL STUDIO.NET

CONHECENDO O VISUAL STUDIO.NET CONHECENDO O VISUAL STUDIO.NET Nesta matéria estaremos apresentando a IDE (Integrated Development Environment) do Visual Studio.NET. A Microsoft incluiu nesta versão da ferramenta de desenvolvimento todos

Leia mais

Ambientes Visuais. Ambientes Visuais

Ambientes Visuais. Ambientes Visuais Ambientes Visuais Inicialmente, apenas especialistas utilizavam os computadores, sendo que os primeiros desenvolvidos ocupavam grandes áreas e tinham um poder de processamento reduzido. Porém, a contínua

Leia mais

Guia do Programador Joel Saade

Guia do Programador Joel Saade C# Guia do Programador Joel Saade Novatec Copyright 2011 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial,

Leia mais

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

PADI 2015/16. Aula 1 Introdução à Plataforma.NET PADI 2015/16 Aula 1 Introdução à Plataforma.NET 1 Sumário 1. Framework.NET Arquitectura 2. Linguagem C# 2.0 Sintaxe C# vs. Java vs. C++ 3. IDE: MS Visual Studio 2005 ou superior Ferramentas Console/Win

Leia mais

Laboratório de Programação I

Laboratório de Programação I Laboratório de Programação I Introdução Visual Studio Fabricio Breve O que é o Visual Studio? Conjunto de ferramentas de desenvolvimento para construir: Aplicativos Web ASP.NET XML Web Services Aplicativos

Leia mais

DESENVOLVIMENTO DE SOFTWARE AULA 1

DESENVOLVIMENTO DE SOFTWARE AULA 1 DESENVOLVIMENTO DE SOFTWARE AULA 1 CAMPUS SANTO ANDRÉ CELSO CANDIDO SEMESTRE 2014 1 Características da Plataforma.NET A plataforma.net Framework 4.0 (.NET 4.0) é uma plataforma de softwares que fornece

Leia mais

Ambiente de Programação Visual. Framework.NET. Prof. Mauro Lopes. Ambiente de Programação Visual Prof. Mauro Lopes

Ambiente de Programação Visual. Framework.NET. Prof. Mauro Lopes. Ambiente de Programação Visual Prof. Mauro Lopes Ambiente de Programação Visual Framework.NET Prof. Mauro Lopes 1-31 16 Objetivos Nesta aula iremos apresentar a tecnologia.net. Ao final desta aula, o aluno terá compreendido a Arquitetura de uma aplicação.net.

Leia mais

Orientação a Objetos com Java

Orientação a Objetos com Java Orientação a Objetos com Java Julio Cesar Nardi julionardi@yahoo.com.br 2011/2 Aula 01: Começando com Java Objetivos: Compreender o que é Java, OO e suas vantagens; Entender os procedimentos para criação

Leia mais

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas

Linguagem de Programação JAVA. Professora Michelle Nery Nomeclaturas Linguagem de Programação JAVA Professora Michelle Nery Nomeclaturas Conteúdo Programático Nomeclaturas JDK JRE JEE JSE JME JVM Toolkits Swing AWT/SWT JDBC EJB JNI JSP Conteúdo Programático Nomenclatures

Leia mais

Para que o NSBASIC funcione corretamente em seu computador, você deve garantir que o mesmo tenha as seguintes características:

Para que o NSBASIC funcione corretamente em seu computador, você deve garantir que o mesmo tenha as seguintes características: Cerne Tecnologia www.cerne-tec.com.br Conhecendo o NSBASIC para Palm Vitor Amadeu Vitor@cerne-tec.com.br 1. Introdução Iremos neste artigo abordar a programação em BASIC para o Palm OS. Para isso, precisaremos

Leia mais

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 1 APRESENTANDO O C#

LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 1 APRESENTANDO O C# LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA CAPÍTULO 1 APRESENTANDO O C# 1.1 - Apresentação Quando fazemos nossas compras em um supermercado, é comum encontrarmos um código de barras impresso nos produtos expostos

Leia mais

Usando Borland DELPHI para implementar aplicações CORBA

Usando Borland DELPHI para implementar aplicações CORBA Página 1 de 10 USANDO BORLAND DELPHI PARA IMPLEMENTAR APLICAÇÕES CORBA por Simone Vey Dutra e César Bridi Introdução A Arquitetura CORBA Criando uma Aplicação CORBA em Delphi Criando um Servidor CORBA

Leia mais

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 1 PROF. EMILIO PARMEGIANI

DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 1 PROF. EMILIO PARMEGIANI DESENVOLVIMENTO DE SOFTWARE PARA INTERNET LABORATÓRIO 1 PROF. EMILIO PARMEGIANI Exercício 1 Neste exercício trabalharemos com alguns web controls básicos e praticaremos os tipos de dados do C#. Vamos criar

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 2

Conhecendo o Visual FoxPro 8.0 Parte 2 AULA Conhecendo o Visual FoxPro 8.0 Parte 2 Na aula anterior, vimos sobre: a) Janela de comando b) Gerenciador de Projetos c) Database Designer e Table Designer Prosseguiremos então a conhecer as ferramentas

Leia mais

1- ASP.NET - HTML Server Controls

1- ASP.NET - HTML Server Controls 1- ASP.NET - HTML Server Controls Os controles de servidor - Server Controls - HTML são tags HTML padrão, com exceção de possuirem o atributo : runat="server". Vejamos um código que ilustra isto: O atributo

Leia mais

Ambiente de Programação Visual. Framework.NET. Prof. Mauro Lopes. Ambiente de Programação Visual Prof. Mauro Lopes

Ambiente de Programação Visual. Framework.NET. Prof. Mauro Lopes. Ambiente de Programação Visual Prof. Mauro Lopes Ambiente de Programação Visual Framework.NET Prof. Mauro Lopes 1-31 13 Objetivos Nesta aula iremos apresentar a tecnologia.net. Ao final desta aula, o aluno terá compreendido a Arquitetura de uma aplicação.net.

Leia mais

Dando um passeio no ASP.NET

Dando um passeio no ASP.NET Dando um passeio no ASP.NET Por Mauro Sant Anna (mas_mauro@hotmail.com). Mauro é um MSDN Regional Director, consultor e instrutor. O principal objetivo da arquitetura.net é permitir ao usuário o fácil

Leia mais

Iniciando no Visual Basic.NET

Iniciando no Visual Basic.NET Iniciando no Visual Basic.NET A Microsoft disponibiliza duas versões das suas ferramentas de desenvolvimento, a versão profissional, que integra, em um único ambiente, todas as ferramentas de desenvolvimento

Leia mais

Tecnólogo em Análise e Desenvolvimento de Sistemas

Tecnólogo em Análise e Desenvolvimento de Sistemas Tecnólogo em Análise e Desenvolvimento de Sistemas O conteúdo deste documento tem como objetivos geral introduzir conceitos mínimos sobre sistemas operacionais e máquinas virtuais para posteriormente utilizar

Leia mais

Linguagem de Programação Procedural (VB) Prof. MSc Eng Marcelo Bianchi AULA 01 - INTRODUÇÃO AO VB

Linguagem de Programação Procedural (VB) Prof. MSc Eng Marcelo Bianchi AULA 01 - INTRODUÇÃO AO VB Linguagem de Programação Procedural (VB) Prof. MSc Eng Marcelo Bianchi AULA 01 - INTRODUÇÃO AO VB Visão Geral do Visual Basic.NET Conceitos Básicos Antes de codificar um programa dentro do Visual Studio

Leia mais

PROGRAMANDO EM C# ORIENTADO A OBJETOS

PROGRAMANDO EM C# ORIENTADO A OBJETOS PROGRAMANDO EM C# ORIENTADO A OBJETOS AGENDA MÓDULO 4 IDE Visual Studio e edições Exemplos IDE - INTEGRATED DEVELOPMENT ENVIRONMENT IDE, Ambiente de Desenvolvimento Integrado. Uma IDE é uma ferramenta

Leia mais

1. Instalando o Java 7 JavaFX e o Netbeans

1. Instalando o Java 7 JavaFX e o Netbeans 1. Instalando o Java 7 JavaFX e o Netbeans Faça o download do Java 7 que inclui JavaFX no site do Oracle: http://www.oracle.com/technetwork/java/javase /downloads/index.html. Clique no License Agreement

Leia mais

Dominando Action Script 3

Dominando Action Script 3 Dominando Action Script 3 Segunda Edição (2014) Daniel Schmitz Esse livro está à venda em http://leanpub.com/dominandoactionscript3 Essa versão foi publicada em 2014-05-02 This is a Leanpub book. Leanpub

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Programando em C# Orientado a Objetos. By: Maromo

Programando em C# Orientado a Objetos. By: Maromo Programando em C# Orientado a Objetos By: Maromo Agenda Módulo 1 Plataforma.Net. Linguagem de Programação C#. Tipos primitivos, comandos de controle. Exercícios de Fixação. Introdução O modelo de programação

Leia mais

PROGRAMAÇÃO EM C# COM VISUAL STUDIO.NET

PROGRAMAÇÃO EM C# COM VISUAL STUDIO.NET PROGRAMAÇÃO EM C# COM VISUAL STUDIO.NET Professor Leo Larback Esta apresentação é parte de um material desenvolvido pelo Prof. Alessandro Brawerman disponível em http://docb.gratix.com.br/csharp TRABALHANDO

Leia mais

Principais características

Principais características .Net Framework O que é.net? Proprietário da Microsoft Versão simplificada para Linux Versão compacta para dispositivos móveis Plataforma de desenvolvimento e execução Interface com usuário, conectividade

Leia mais

Linguagem de Programação Visual

Linguagem de Programação Visual Linguagem de Programação Visual Unidade 1 Ambiente de desenvolvimento Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 SOBRE O JAVA... 3 AMBIENTE DE DESENVOLVIMENTO... 5 RECURSOS DA FERRAMENTA NETBEANS...

Leia mais

Aula 1 - Introdução e configuração de ambiente de desenvolvimento

Aula 1 - Introdução e configuração de ambiente de desenvolvimento Aula 1 - Introdução e configuração de ambiente de desenvolvimento Olá, seja bem-vindo à primeira aula do curso para desenvolvedor de Android, neste curso você irá aprender a criar aplicativos para dispositivos

Leia mais

Guião de Introdução ao Eclipse IDE Índice

Guião de Introdução ao Eclipse IDE Índice Índice 1. Introdução... 2 1.1. O que é um ambiente de desenvolvimento (IDE)?... 2 1.2. Visão geral sobre o Eclipse IDE... 2 2. Iniciar o Eclipse... 3 2.1. Instalação... 3 2.2. Utilizar o Eclipse... 3 3.

Leia mais

Criando uma aplicação Web em C# usando o NHibernate

Criando uma aplicação Web em C# usando o NHibernate Criando uma aplicação Web em C# usando o NHibernate Apresento neste artigo como criar uma aplicação web totalmente orientada a objetos usando o framework NHibernate e a linguagem C#. Nossa meta é construir

Leia mais

Instalando o IIS 7 no Windows Server 2008

Instalando o IIS 7 no Windows Server 2008 Goiânia, 16/09/2013 Aluno: Rafael Vitor Prof. Kelly Instalando o IIS 7 no Windows Server 2008 Objetivo Esse tutorial tem como objetivo demonstrar como instalar e configurar o IIS 7.0 no Windows Server

Leia mais

Instalando o IIS 7 no Windows Server 2008

Instalando o IIS 7 no Windows Server 2008 Goiânia, 16/09/2013 Aluno: Rafael Vitor Prof. Kelly Instalando o IIS 7 no Windows Server 2008 Objetivo Esse tutorial tem como objetivo demonstrar como instalar e configurar o IIS 7.0 no Windows Server

Leia mais

Nome N Série: Ferramentas

Nome N Série: Ferramentas Nome N Série: Ferramentas Competências: Identificar e utilizar técnicas de modelagem de dados; Habilidades: Utilizar ferramentas de apoio ao desenvolvimento de software; Bases Tecnológicas: Metodologias

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Integrando Eclipse e Websphere Application Server Community Edition

Integrando Eclipse e Websphere Application Server Community Edition 1 Integrando Eclipse e Websphere Application Server Community Edition Sobre o Autor Carlos Eduardo G. Tosin (carlos@tosin.com.br) é formado em Ciência da Computação pela PUC-PR, pós-graduado em Desenvolvimento

Leia mais

Desenvolvimento de Aplicações Locais na Plataforma Microsoft

Desenvolvimento de Aplicações Locais na Plataforma Microsoft Desenvolvimento de Aplicações Locais na Plataforma Microsoft Profª. Angelina V.S. Melaré angelinamelare@gmail.com Tecnologia em Análise e Desenvolvimento de Sistemas 1ºsem/2008 Objetivo da Aula Saber diferenciar

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 1

Conhecendo o Visual FoxPro 8.0 Parte 1 AULA Conhecendo o Visual FoxPro 8.0 Parte 1 Em qualquer profissão é importante que se conheça bem as ferramentas que serão usadas para executar o trabalho proposto. No desenvolvimento de software não é

Leia mais

Apêndice A. Manual do Usuário JSARP

Apêndice A. Manual do Usuário JSARP Apêndice A Manual do Usuário JSARP A.1. Introdução JSARP é um simulador e analisador de Redes de Petri. É um aplicativo que permite desenhar uma rede, fazer análises, verificar propriedades e simular sua

Leia mais

Ferramentas RAD e DELPHI

Ferramentas RAD e DELPHI Origem: http://my.opera.com/maicokrause/blog/ferramentas-rad-e-delphi Data: 17 Nov 2009 Autor: Maico Krause Ferramentas RAD e DELPHI Thursday, 16. July 2009, 14:27:40 Desenvolvimento, Delphi, Engenharia

Leia mais

Treinar - Cursos e Treinamentos C# Módulo I. Carga horária: 32 Horas

Treinar - Cursos e Treinamentos C# Módulo I. Carga horária: 32 Horas Treinar - Cursos e Treinamentos C# Módulo I Carga horária: 32 Horas Pré-requisito: Para que os alunos possam aproveitar este treinamento ao máximo, é importante que eles tenham participado dos treinamentos

Leia mais

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 ActionScript_30_01.indd 2 5/11/2010 08:29:34 Aprendendo uma nova linguagem... ActionScript é uma linguagem e, como um novo idioma ou a linguagem

Leia mais

Início Rápido Web. 2015 Release 1 Xojo, Inc.

Início Rápido Web. 2015 Release 1 Xojo, Inc. Início Rápido Web 2015 Release 1 Xojo, Inc. Capítulo 1 Introdução Bem-vindo ao Xojo, O jeito mais fácil de criar aplicativos multi-plataforma para Desktop e Web. Seção 1 Sobre o Início Rápido Web INICIANDO

Leia mais

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO Serviço Nacional de Aprendizagem Comercial E.E.P. Senac Pelotas Centro Histórico Programa Nacional de Acesso ao Ensino Técnico e Emprego Curso Técnico em Informática ( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO

Leia mais

MANUAL DO ADMINISTRADOR DO MÓDULO

MANUAL DO ADMINISTRADOR DO MÓDULO MANUAL DO ADMINISTRADOR DO MÓDULO ÍNDICE Relatórios Dinâmicos... 3 Requisitos de Sistema... 4 Estrutura de Dados... 5 Operadores... 6 Tabelas... 7 Tabelas x Campos... 9 Temas... 13 Hierarquia Relacionamento...

Leia mais

FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C#

FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C# FERRAMENTAS NECESSÁRIAS PARA O DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Willian Magalhães 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wmagalhaes@unipar.br

Leia mais

Microsoft Visual Studio 2010 C# Volume II

Microsoft Visual Studio 2010 C# Volume II Microsoft Visual Studio 2010 C# Volume II Apostila desenvolvida pelos Professores Ricardo Santos de Jesus e Rovilson de Freitas, para as Disciplinas de Desenvolvimento de Software I e II, nas Etecs de

Leia mais

PL/SQL Developer. Solução para Ambiente de Desenvolvimento Integrado Oracle

PL/SQL Developer. Solução para Ambiente de Desenvolvimento Integrado Oracle Solução para Ambiente de Desenvolvimento Integrado Oracle PL/SQL Developer é um ambiente de desenvolvimento integrado (IDE) que foi especialmente destinado ao desenvolvimento de programas armazenados em

Leia mais

DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION

DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION DESENVOLVIMENTO DE APLICATIVOS PARA CELULAR JAVA 2 MICRO EDITION Robison Cris Brito Centro Federal de Educação Tecnológica do Paraná Unidade de Pato Branco robison@pb.cefetpr.br RESUMO Engana-se quem acha

Leia mais

Introdução ao IDE Netbeans (Programação Java)

Introdução ao IDE Netbeans (Programação Java) Universidade Federal do ABC (UFABC) Disciplina: Processamento da Informação (BC-0505) Assunto: Java e Netbeans Introdução ao IDE Netbeans (Programação Java) Conteúdo 1. Introdução... 1 1.1. Programas necessários...

Leia mais

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação de Computadores - I. Profª Beatriz Profº Israel Programação de Computadores - I Profª Beatriz Profº Israel A linguagem JAVA A linguagem Java O inicio: A Sun Microsystems, em 1991, deu inicio ao Green Project chefiado por James Gosling. Projeto que apostava

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho O que é um Programa? Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais

Leia mais

ASP.NET 2.0 e PHP. Autor: Glauber de Almeida e Juarez Fernandes

ASP.NET 2.0 e PHP. Autor: Glauber de Almeida e Juarez Fernandes ASP.NET 2.0 e PHP Autor: Glauber de Almeida e Juarez Fernandes Linguagens pesquisadas ASP.NET 2.0 e PHP. 1 - ASP.NET 2.0 ASP.NET não é nem uma linguagem de programação como VBScript, php, nem um servidor

Leia mais

INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS COM LIBGDX. Vinícius Barreto de Sousa Neto

INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS COM LIBGDX. Vinícius Barreto de Sousa Neto INTRODUÇÃO AO DESENVOLVIMENTO DE JOGOS COM LIBGDX Vinícius Barreto de Sousa Neto Libgdx é um framework multi plataforma de visualização e desenvolvimento de jogos. Atualmente ele suporta Windows, Linux,

Leia mais

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da Java Laboratório Aula 1 Programação orientada a objetos Profa. Renata e Cristiane Introdução a Plataforma Java O que é Java? Tecnologia Linguagem de Programação Ambiente de Execução (JVM) Tudo isso é a

Leia mais

b 1 Copyright 2008-2012 In9 Mídia Soluções Digitais Inc. All rights reserved.

b 1 Copyright 2008-2012 In9 Mídia Soluções Digitais Inc. All rights reserved. b 1 Conteúdo Capítulo 1... 3 Instalando o Neonews... 3 Neonews no Linux... 6 Capítulo 2... 7 Configurando o NeoNews... 7 Capítulo 3... 13 Teclas de Atalho do NeoNews Player... 13 2 Capítulo 1 Instalando

Leia mais

Início Rápido Desktop. 2015 Release 1 Xojo, Inc.

Início Rápido Desktop. 2015 Release 1 Xojo, Inc. Início Rápido Desktop 2015 Release 1 Xojo, Inc. Capítulo 1 Introdução Bem-vindo ao Xojo, O jeito mais fácil de criar aplicativos multi-plataforma para Desktop e Web. Seção 1 Sobre o Início Rápido para

Leia mais

Estudo comparativo entre tecnologias Java: Applet e JWS.

Estudo comparativo entre tecnologias Java: Applet e JWS. Estudo comparativo entre tecnologias Java: Applet e JWS. Clara Aben-Athar B. Fernandes¹, Carlos Alberto P. Araújo¹ 1 Centro Universitário Luterano de Santarém Comunidade Evangélica Luterana (CEULS/ULBRA)

Leia mais

Programação Orientada a Objetos

Programação Orientada a Objetos Programação Orientada a Objetos Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marciobueno.com Fonte: Material da Profª Karina Oliveira Introdução ao Paradigma OO

Leia mais

É uma das linguagens de programação que fazem parte da Plataforma.NET (em inglês: dotnet) criada pela Microsoft (Microsoft.NET).

É uma das linguagens de programação que fazem parte da Plataforma.NET (em inglês: dotnet) criada pela Microsoft (Microsoft.NET). C ( C-Sharp ) LPI 1. A Plataforma.NET (em inglês: dotnet) Visão Geral C é uma linguagem de programação. É uma das linguagens de programação que fazem parte da Plataforma.NET (em inglês: dotnet) criada

Leia mais

Banco de Dados BrOffice Base

Banco de Dados BrOffice Base Banco de Dados BrOffice Base Autor: Alessandro da Silva Almeida Disponível em: www.apostilando.com 27/02/2011 CURSO TÉCNICO EM SERVIÇO PÚBLICO Apostila de Informática Aplicada - Unidade VI Índice Apresentação...

Leia mais

Lógica de Programação

Lógica de Programação Lógica de Programação Unidade 4 Ambiente de desenvolvimento Java QI ESCOLAS E FACULDADES Curso Técnico em Informática SUMÁRIO A LINGUAGEM JAVA... 3 JVM, JRE, JDK... 3 BYTECODE... 3 PREPARANDO O AMBIENTE

Leia mais

TUTORIAL 01. Conteúdo. Figura 1. Figura 2

TUTORIAL 01. Conteúdo. Figura 1. Figura 2 INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE Campus João Câmara Avenida Antônio Severiano da Câmara / BR 406, Km 101, s/n Zona Rural. Bairro Amarelão João Câmara/RN - CEP:

Leia mais

FERRAMENTAS PARA DESENVOLVIMENTO EM C#

FERRAMENTAS PARA DESENVOLVIMENTO EM C# FERRAMENTAS PARA DESENVOLVIMENTO EM C# Camila Sanches Navarro 1,2, Wyllian Fressatti 2 ¹Universidade paranaense (Unipar) Paranavaí PR Brasil sanchesnavarro@gmail.com wyllian@unipar.br Resumo. Este artigo

Leia mais

Conheça mais da Caelum. Cursos Online www.caelum.com.br/online. Casa do Código. Blog Caelum blog.caelum.com.br

Conheça mais da Caelum. Cursos Online www.caelum.com.br/online. Casa do Código. Blog Caelum blog.caelum.com.br Conheça mais da Caelum. Cursos Online www.caelum.com.br/online Casa do Código Livros para o programador www.casadocodigo.com.br Blog Caelum blog.caelum.com.br Newsletter www.caelum.com.br/newsletter Facebook

Leia mais

Instalação, configuração e manual

Instalação, configuração e manual Cardápio Moura Instalação, configuração e manual Conteúdo Instalação... 4 Requisitos mínimos... 4 Windows 8... 5 Instalação do IIS no Windows 8... 5 Configuração do IIS no WINDOWS 8... 15 Windows 7...

Leia mais

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO

1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO 1 ÍNDICE 1 REQUISITOS BÁSICOS PARA INSTALAR O SMS PC REMOTO... 3 1.1 REQUISITOS BASICOS DE SOFTWARE... 3 1.2 REQUISITOS BASICOS DE HARDWARE... 3 2 EXECUTANDO O INSTALADOR... 3 2.1 PASSO 01... 3 2.2 PASSO

Leia mais

Aula 01: Linguagens de Programação e Introdução ao Visual C# Express

Aula 01: Linguagens de Programação e Introdução ao Visual C# Express Aula 01: Linguagens de Programação e Introdução ao Visual C# Express EMENTA: Introdução ao Visual C#. Fundamentos da Linguagem. Estruturas de decisão e repetição. Modularização de Programas: Funções. Arrays

Leia mais

Tecnologia Java. Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br

Tecnologia Java. Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br Tecnologia Java Daniel Destro do Carmo Softech Network Informática daniel@danieldestro.com.br Origem da Tecnologia Java Projeto inicial: Oak (liderado por James Gosling) Lançada em 1995 (Java) Tecnologia

Leia mais

CAPÍTULO IV Sistema Operacional Microsoft Windows XP

CAPÍTULO IV Sistema Operacional Microsoft Windows XP CAPÍTULO IV Sistema Operacional Microsoft Windows XP Sistemas Operacionais Sistemas Operacionais são programas que como o próprio nome diz tem a função de colocar o computador em operação. O sistema Operacional

Leia mais

NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto Web no qual iremos aplicar os temas e os skins.

NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto Web no qual iremos aplicar os temas e os skins. TUTORIAL 01 USANDO THEMES E SKINS EM UMA APLICAÇÃO ASP.NET ETAPA 1: Criando um novo Web Site usando o Visual Studio 2010 NOTA: Neste tutorial foi utilizado o Visual Studio 2010 para criar o Projeto Web

Leia mais

Microsoft Office Excel

Microsoft Office Excel 1 Microsoft Office Excel Introdução ao Excel Um dos programas mais úteis em um escritório é, sem dúvida, o Microsoft Excel. Ele é uma planilha eletrônica que permite tabelar dados, organizar formulários,

Leia mais

Lição 4 - Primeiros passos no Linux Ubuntu 11.04

Lição 4 - Primeiros passos no Linux Ubuntu 11.04 Lição 4 - Primeiros passos no Linux Ubuntu 11.04 Olá Aluno Os objetivos específicos desta lição são: - reconhecer o Ubuntu como mais uma alternativa de sistema operacional; - conhecer os elementos da área

Leia mais

FACULDADE DE TECNOLOGIA SENAC GOIÁS CONTROLE DE ACESSO USANDO O FRAMEWORK RICHFACES. 5º PERÍODO Gestão da Tecnologia da Informação

FACULDADE DE TECNOLOGIA SENAC GOIÁS CONTROLE DE ACESSO USANDO O FRAMEWORK RICHFACES. 5º PERÍODO Gestão da Tecnologia da Informação FACULDADE DE TECNOLOGIA SENAC GOIÁS CONTROLE DE ACESSO USANDO O FRAMEWORK RICHFACES 5º PERÍODO Gestão da Tecnologia da Informação Alunos: Alessandro Aparecido André Alexandre Bruno Santiago Thiago Castilho

Leia mais

Criando & Consumindo um WebService com ASP.NET 2.0 Publicado em: 25 de Agosto de 2007 Por Herman Ferdinando Arais

Criando & Consumindo um WebService com ASP.NET 2.0 Publicado em: 25 de Agosto de 2007 Por Herman Ferdinando Arais ASP.NET > WebService herman_arais@yahoo.com.br Introdução Um WebService é um componente, ou unidade lógica de aplicação, acessível através de protocolos padrões de Internet. Como componentes, esses serviços

Leia mais

CURSO DE PROGRAMAÇÃO EM JAVA

CURSO DE PROGRAMAÇÃO EM JAVA CURSO DE PROGRAMAÇÃO EM JAVA Introdução para Iniciantes Prof. M.Sc. Daniel Calife Índice 1 - A programação e a Linguagem Java. 1.1 1.2 1.3 1.4 Linguagens de Programação Java JDK IDE 2 - Criando o primeiro

Leia mais

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7 Serviço Nacional de Aprendizagem Comercial do Rio Grande do Sul Informação e Comunicação: Habilitação Técnica de Nível Médio Técnico em Informática Programação Android na IDE Eclipse PROGRAMANDO ANDROID

Leia mais

Introdução ao Veridis Biometrics SDK VERIDIS

Introdução ao Veridis Biometrics SDK VERIDIS Introdução ao Veridis Biometrics SDK Versão do SDK: 5.0 2013 Veridis Biometrics VERIDIS BIOMETRICS Versão do Documento Versão Data Modificações 1 2 3 4 5 23/mar/2011 17/mai/2011 29/jul/2011 3/out/2011

Leia mais

Linguagem de Programação II

Linguagem de Programação II Linguagem de Programação II Conteúdo Unidade 1: Introdução A PLATAFORMA.NET... 5 Introdução... 5 Dificuldades encontradas no desenvolvimento de sistemas para Windows antes do.net... 7 A abordagem.net...

Leia mais

Software de monitoramento Módulo CONDOR CFTV V1 R1

Software de monitoramento Módulo CONDOR CFTV V1 R1 Software de monitoramento Módulo CONDOR CFTV V1 R1 Versão 30/06/2014 FOR Segurança Eletrônica Rua dos Lírios, 75 - Chácara Primavera Campinas, SP (19) 3256-0768 1 de 12 Conteúdo A cópia total ou parcial

Leia mais

ROTEIRO ILUSTRADO PARA SISTEMA COMPUTACIONAL INSANE

ROTEIRO ILUSTRADO PARA SISTEMA COMPUTACIONAL INSANE UNIVERSIDADE FEDERAL DE MINAS GERAIS PROPEEs - Programa de Pós-Graduação em Engenharia de Estruturas INSANE - INteractive Structural ANalysis Environment ROTEIRO ILUSTRADO PARA INSTALAÇÃO DO SISTEMA COMPUTACIONAL

Leia mais

Introdução ao Delphi. Introdução. Edições do Software. Capítulo 1. InforBRás - Informática Brasileira Ltda. O Que é o Delphi.

Introdução ao Delphi. Introdução. Edições do Software. Capítulo 1. InforBRás - Informática Brasileira Ltda. O Que é o Delphi. Capítulo 1 O Que é o Delphi Diferenças entre Delphi Client/Server do Delphi for Windows Características que compõem o Integrated Development Invironment (IDE) Como o Delphi se encaixa na família Borland

Leia mais

PROGRAMAÇÃODE COMPUTADORES I:C# LuizHenriqueC.Corêa

PROGRAMAÇÃODE COMPUTADORES I:C# LuizHenriqueC.Corêa PROGRAMAÇÃODE COMPUTADORES I:C# LuizHenriqueC.Corêa INFORMAÇÃOECOMUNICAÇÃO PROGRAMAÇÃODE COMPUTADORES I:C# LuizHenriqueC.Corêa INFORMAÇÃOECOMUNICAÇÃO Autor Luiz Henrique C. Corrêa Profissional com mais

Leia mais

Excel 2010 Modulo II

Excel 2010 Modulo II Excel 2010 Modulo II Sumário Nomeando intervalos de células... 1 Classificação e filtro de dados... 3 Subtotais... 6 Validação e auditoria de dados... 8 Validação e auditoria de dados... 9 Cenários...

Leia mais

Introdução a lógica de programação. Aula 02: Linguagens de Programação e Introdução ao Visual C# Express

Introdução a lógica de programação. Aula 02: Linguagens de Programação e Introdução ao Visual C# Express Introdução a lógica de programação Aula 02: Linguagens de Programação e Introdução ao Visual C# Express Roteiro da aula Linguagem de Programação Visual C#: Introdução a C# através de comandos de entrada

Leia mais

2. O AMBIENTE DE PROGRAMAÇÃO EM C

2. O AMBIENTE DE PROGRAMAÇÃO EM C 2. O AMBIENTE DE PROGRAMAÇÃO EM C Este capítulo trata de colocar a linguagem C para funcionar em um ambiente de programação, concentrando-se no compilador GNU Compiler Collection (gcc). Mas qualquer outro

Leia mais

Centro Universitário do Triângulo Introdução ao Ambiente Delphi

Centro Universitário do Triângulo Introdução ao Ambiente Delphi Centro Universitário do Triângulo Introdução ao Ambiente Delphi A figura abaixo mostra a tela inicial do Delphi 7 e nos dá uma visão geral de seu ambiente de desenvolvimento, composto de múltiplas janelas

Leia mais

Scriptlets e Formulários

Scriptlets e Formulários 2 Scriptlets e Formulários Prof. Autor: Daniel Morais dos Reis e-tec Brasil Programação Avançada Para Web Página1 Meta Permitir ao aluno aprender a criar um novo projeto Java para web no Netbeans IDE,

Leia mais