Baixe o app para aproveitar ainda mais
Prévia do material em texto
Livro Eletrônico Aula 08 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital Judah Reis 1 29 Sumário 1 DELPHI .................................................................................................................................... 2 1.1 INTRODUÇÃO ............................................................................................................... 2 1.2 DELPHI: SINTAXE .......................................................................................................... 4 1.3 DELPHI: ACESSO A BASE DE DADOS ..................................................................... 5 1.4 DELPHI: FUNÇÕES DE CALLBACK ........................................................................... 5 1.5 DELPHI: VERSÃO 7 X VERSÃO 2005 ....................................................................... 6 2 DELPHI AVANÇADO ........................................................................................................... 7 2.1 DELPHI AVANÇADO: INTERFACES .......................................................................... 7 2.2 DELPHI AVANÇADO: PACKAGES ............................................................................ 8 2.3 DELPHI AVANÇADO: MENSAGENS DO WINDOWS .......................................... 9 2.4 DELPHI AVANÇADO: CRIAÇÃO DE COMPONENTES ...................................... 10 2.5 DELPHI AVANÇADO: THREADS .............................................................................. 11 2.6 DELPHI AVANÇADO: XML ....................................................................................... 14 2.7 DELPHI AVANÇADO: WEB MODULES ................................................................. 15 3 EXERCÍCIOS COMENTADOS: DELPHI .......................................................................... 17 4 LISTA DE EXERCÍCIOS: DELPHI ...................................................................................... 25 5 GABARITOS ........................................................................................................................ 29 5.1 GABARITO: DELPHI ................................................................................................... 29 Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 2 29 1 DELPHI 1.1 INTRODUÇÃO Galera, antes de começarmos, é importante saber que nesta aula vou considerar que você já conhece o básico de lógica de programação, beleza? Assim poderemos focalizar no que é específico da linguagem Delphi. Mas fiquem tranquilo, começaremos com os conceitos básicos, e nas resoluções das questões tudo está bem explicado, mas caso tenha alguma dúvida, estamos à disposição, ok? Delphi teve início como uma linguagem de programação e ambiente de desenvolvimento para a plataforma Windows pela empresa Borland, e utiliza a linguagem Object Pascal para transformar código-fonte em linguagem nativa para Windows (hoje para outros SOs). Com o tempo, o Delphi incluiu suporte completo ao ActiveX; a uma biblioteca de widgets orientada a objetos (chamada Visual Component Library - VCL e Component Library for Cross-Platform - CLX); e um rápido ambiente de desenvolvimento para aplicações que é extensível e customizável. Atualmente está na versão 10, mantida pela empresa Embarcadero©. A IDE provê diversas ferramentas para projeto, desenvolvimento, testes, depuração, implantação, geração de relatórios – permitindo prototipação rápida. Entre as ferramentas mais utilizadas para o desenho de sistemas de software estão as apresentadas a seguir: Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 3 29 Ferramentas Descrição Form Designer Uma janela em branco para desenhar a interface gráfica da aplicação. Component Palette Utilizado para exibir componentes visuais e não-visuais para o desenho da interface gráfica. Object Inspector Utilizado para examinar e modificar as propriedades e eventos de um objeto. Code Editor Utilizado para escrever e editar a lógica interna do programa ou aplicação. Project Manager Utilizado para gerenciar arquivos da aplicação que criam ou mais projetos. Integrated Debugger Utilizada para encontrar e consertar erros no código de programação. Outros Além de editores, ferramentas de linha de comando, compiladores, ligadores, extensa biblioteca de classes com diversos objetos reusáveis. Essas ferramentas Delphi permitem criar aplicações de forma muito simples: à medida que se constrói a interface gráfica, o Form Designer gera o código Delphi interno que suporta a aplicação. Ao selecionar ou modificar propriedades de componentes e formulários, os resultados dessas mudanças aparecem automaticamente no código-fonte e vice-versa. OBSERVAÇÕES Pode-se, também, utilizar os componentes CLX (Component Library for Cross Platform) para criar aplicações que funcionem tanto no Windows quanto no Linux. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 4 29 1.2 DELPHI: SINTAXE Apesar de ser um “gerador de código” às vezes é necessário escrever algumas linhas, além disso os examinadores adoram questões de sintaxe básica. A sintaxe de Delphi é a da linguagem Pascal. Vamos ver o código de uma unit (módulo básico de Delphi) simples de um botão que diz “Hello World”. A unit é composta por dois blocos: interface e implementation. Os comentários explicam o código. unit Unit1; //gerará o arquivo Unit1.pas interface //são declaradas as bibliotecas utilizada, os tipos, variáveis... uses //importação de bibliotecas/classes Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type //utilizado para a declaração de tipos, nesse é criado um formulário. TForm1 = class(TForm) //nosso tipo TForm1 é uma classe TForm Label1: TLabel; //um dos atributos é o label1 do tipo TLabel Button1: TButton; //o outro é o Button do tipo TButton; procedure Button1Click(Sender: TObject); //será ativado no clique do botão private { private declarations } public { public declarations } end; //fim do bloco type var //trecho de declaração de variáveis Form1: TForm1; //acima foi criado o tipo TForm1 que agora pode ser utilizado implementation //bloco que implementa a interface {$R *.dfm} //diretiva para o compilador linkar todos os Resources do tipo dfm //agora é definida a ação que ocorrerá ao clicar no botão procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := 'Hello World'; //o label mudará para "Hello Word". end; end. //fim da unit Repare que para declarar uma variável no Delphi a sintaxe é “Nome_da_variavel : Tipo” e que os tipos criados através da declaração type podem ser utilizados também da mesma forma que os tipos básicos. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 5 29 1.3 DELPHI: ACESSO A BASE DE DADOS Para acessar base de dados com o Delphi, existem componentesespecíficos para auxiliar desde a conexão até a manipulação dos dados. Apesar de não serem visuais, os componentes de acesso a dados aparecem na Paleta de Componentes do Delphi. Alguns desses componentes são o TTable, TQuery, TDataSource, e o TDatabase. Além dos componentes de acesso a dados também temos os componentes que trabalham na visualização e na edição dos dados, esses são chamados Data Controls Components, entre eles estão o DBGrid, DBEdit, e DBMemo. E para auxiliar na conexão a um banco de dados específico, existe o componente dbExpress, basta informar o driver respectivo para que a conexão seja realizada. Os dados podem ser acessados através do componente TDataSet, mas normalmente o que acessamos são os campos, através do objeto TField e seus descendentes. Além de recuperar e aplicar os valores de um campo no registro corrente do dataset, você também pode alterar o comportamento de um campo ao modificar suas propriedades. Também é possível modificar o próprio dataset, modificando a ordem dos campos, removendo campos, e até criando novos campos calculados ou de seleção. 1.4 DELPHI: FUNÇÕES DE CALLBACK Uma função de callback é uma função da sua aplicação chamada por uma DLL. Basicamente, o Windows possui várias funções da API que necessitam de funções de callback. Ao chamar estar funções, você passa um endereço de uma função definida por sua aplicação que o Windows pode chamar. Um exemplo é a função EnumWindows(), que faz parte da API, ela enumera todas as janelas abertas. Essa função passa a manipulação de cada janela na enumeração para a callback function definida por sua aplicação. Você precisa definir e passar o endereço de uma função callback para a EnumWindows(). Essas funções tem assinatura padrão e para a EnumWindows() seria definida assim: function EnumWindowsProc(Hw: HWnd; lp: lParam): Boolean; stdcall; Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 6 29 1.5 DELPHI: VERSÃO 7 X VERSÃO 2005 A versão 2005 do Delphi ainda era da Borland, e incluiu muitas novidades com relação às versões anteriores, em especial à 7, uma das mais usadas à época. A principal ideia era migrar as aplicações Win32 para a nova plataforma .NET (1.1 à época). Delphi 2005 tem três diferentes formas de utilização: ▪ Usando a linguagem Delphi original (dialeto Objective Pascal), como um sucessor natural do Borland Delphi 7; ▪ Usando o framework .NET, também utilizando a linguagem Delphi; ▪ Usando o framework .NET utilizando o C# como linguagem de programação (substituindo o Borland C#Builder 1.0); Uma lista mais completa de novidades da versão 2005 é a que segue: ▪ Facilidades na migração de aplicações Win32 para .NET; ▪ Suporte para melhorias na linguagem Delphi, como a inclusão da estrutura de repetição for ... in ... do (foreach similiar ao Java e outras linguagens); ▪ Suporte para WinForms e ASP.NET Web Forms; ▪ Suporte para acesso a bases de dados heterogêneas (usando ADO.NET Data Adapter) bem como bancos de dados em aplicações multicamada; ▪ Suporte para refatoramento de código; ▪ Suporte para teste de unidade com DUnit e NUnit; ▪ Suporte para controle de versão e desenvolvimento em equipe; ▪ Suporte para integração com J2EE Enterprise JavaBeans (EJB) e servidores CORBA. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 7 29 2 DELPHI AVANÇADO Agora que vimos a parte básica, vamos a detalhes um pouquinho mais a fundo para entendermos como funciona o uso de interfaces, pacotes (packages), mensagens do Windows, criação de componentes, Threads, arquivos XML e Web Modules. A grande referência para esses assuntos são as documentações da antiga Borland (hoje Embarcadero) disponíveis online. 2.1 DELPHI AVANÇADO: INTERFACES Delphi suporta herança simples, ou seja, uma classe pode ter somente uma classe pai (superclasse). Assim também é a linguagem Java, por exemplo. Quando é necessário herdar métodos similares, mas com implementações diferentes, as interfaces podem prover algo nesse sentido. Como vemos mais em detalhes nos conceitos de orientação a objetos, as interfaces são como classes com métodos abstratos (sem implementação). As classes que utilizam as interfaces devem implementá-las. Os métodos das interfaces são definidos pelo número e tipo dos seus parâmetros, bem como o tipo de retorno. Em Delphi, por convenção, as interfaces começam com “i” maiúsculo. Por exemplo, a interface “PersisteCliente” deve ter o nome “IPersisteCliente”. Uma interface tem a seguinte sintaxe: IMeuObjeto = interface procedure MeuProcedimento; end; Um exemplo de declaração de interface: type IEdit = interface procedure Copy; procedure Cut; procedure Paste; function Undo: Boolean; end; Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 8 29 As interfaces nunca podem ser diretamente instanciadas. Para utilizá-las é preciso acessar uma classe que a implemente (bem similar ao conceito que estamos acostumados em orientação a objetos). Para implementar uma interface devemos definir uma classe que a declare na sua lista de ancestrais, indicando que a classe implementará todos os métodos da interface: TEditor = class(TInterfacedObject, IEdit) procedure Copy; procedure Cut; procedure Paste; function Undo: Boolean; end; A classe TEditor é subclasse de TInterfacedObject (todas as classes que implementam alguma interface deve ter essa superclasse) e implementa a interface IEdit, com todas as suas funções. Agora que conhecemos um pouco mais de como funcionam as interfaces (conceito de orientação a objetos) vamos falar sobre packages. 2.2 DELPHI AVANÇADO: PACKAGES Galera, pra entender os packages precisamos conhecer o que são as famosas bibliotecas dinâmicas do Windows, ou ainda, Dynamic link libraries (DLLs). DLLs são módulos de código compilado que trabalham em conjunto com um código executável para prover uma funcionalidade específica para uma aplicação. Um package (pacote) é um tipo especial de dynamic-link library (DLL) usada por aplicações compiladas ou mesmo na IDE de desenvolvimento Delphi. Existem dois tipos de packages: ▪ Runtime packages provêm funcionalidades quando um usuário executa uma aplicação (uso em tempo de execução) ▪ Design-time packages são usados para instalar componentes na IDE e para criar editores com propriedades especiais para componentes customizados (uso no momento da criação do software na IDE Delphi) O mesmo package pode funcionar tanto como design time quanto runtime. Para diferenciar os packages das DLLs normais, as primeiras são armazenadas em arquivos com extensão .bpl (Borland package library). Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 9 29 2.3 DELPHI AVANÇADO: MENSAGENS DO WINDOWS Uma aplicação que possui interface gráfica deve responder a eventos do usuário e do sistema operacional. No Windows, esses eventos são controlados por meio de mensagens. Eventos do usuário incluem as formasde interação com o programa, por exemplo: cliques de mouse, uso de teclas, movimentos de touch-screen, etc. Eventos do sistema operacional incluem tudo o que acontece “fora da aplicação” que pode afetar de alguma forma o modo como o programa se comporta. Por exemplo, o usuário pode plugar um novo hardware ou colocar o computador em modo de espera. Uma mensagem é simplesmente um código numérico alocado para um determinado evento. Por exemplo, quando o usuário clica com o botão esquerdo do mouse a janela corrente recebe uma mensagem com o código: #define WM_LBUTTONDOWN 0x0201 Algumas mensagens contém dados associados a elas. No nosso exemplo, a mensagem WM_LBUTTONDOWN inclui as coordenadas x e y do cursor do mouse. Para tratar as mensagens do Windows usando Delphi, deve-se utilizar o método OnMessage definido na classe TApplication. Da mesma forma que receber as mensagens do Windows, é permitido ao usuário criar suas próprias mensagens para utilização a aplicação. O código a seguir cria a mensagem WM_FILEREADY, envia e mensagem e também possui o código para tratá-la: { declaração da nova mensagem de Windows, com o número WM_USER + 2000 } { o número deve ser WM_USER para cima para não conflitar com as mensagens } { predefinidas no Windows} const WM_FILEREADY = WM_USER + 2000; procedure TForm1.Button1Click(Sender: TObject); const Path: PChar = 'OverView.RTF'; begin { envia mensagem do Windows customizada pelo usuário } PostMessage(Application.Handle, WM_FILEREADY, 0, integer(Path)); end; procedure TForm1.FormCreate(Sender: TObject); begin Application.OnMessage := AppMessage; end; Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 10 29 procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean); var msgStr: String; begin if Msg.hwnd = Application.Handle then begin { código para tratamento da mensagem do Windows WM_FILEREADY } if Msg.message = WM_FILEREADY then begin msgStr:= PChar(Msg.lParam); Memo1.Lines.LoadFromFile(msgStr); Handled := True; end; end; { para todas as outras mensagens Handled continua como False } { para que os outros procedimentos de tratamento possam responder } end; Legal não é? Desse modo é possível receber as mensagens de Windows, identificá- las e escrever um tratamento específico para cada uma delas. Vamos agora entender como fazemos para criar componentes no Delphi. 2.4 DELPHI AVANÇADO: CRIAÇÃO DE COMPONENTES Componentes são os blocos de construção das aplicações desenvolvidas em Delphi. Apesar de a maioria dos componentes representarem partes visíveis da interface com o usuário, eles também podem ser elementos não visuais num programa, como acesso a bancos de dados e temporizadores. Os componentes tem três níveis de definição: funcional, técnica e prática. A partir da perspectiva do usuário, um componente é algo que ele pode escolher a partir de uma palheta de opções e utilizar numa aplicação a partir do Forms Designer (gráfico) ou mesmo pela manipulação do código-fonte. Já na perspectiva do desenvolvedor, ou criador dos componentes, o componente é um objeto em código. No nível mais simples, um componente é qualquer objeto de classe que tenha como superclasse TComponent. Essa superclasse define a maioria dos comportamentos básicos que todo componente deve ter, como a habilidade de aparecer na palheta de componentes (Component palette) e como deve funcionar no Forms Designer.Há três principais diferenças entre desenvolver uma aplicação em Delphi e criar componentes para serem utilizados numa aplicação: Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 11 29 ▪ A criação de componentes não é visual (não há palhetas de opções para compor o componente) ▪ Escrever componentes requer um conhecimento mais profundo de orientação de objetos e dos objetos do arcabouço do Delphi ▪ Para escrever componentes mais convenções e regras devem ser observadas Em resumo, o processo de criar componentes segue os passos: 1. Criar uma unit para o novo componente 2. Derivar o tipo do componente a partir de um tipo de componente existente (ao menos TComponent) 3. Adicionar propriedades, métodos e eventos conforme necessário 4. Registrar o componente no Delphi 5. Criar um arquivo de Help para o componente, seus métodos, propriedades e eventos A Borland criou um livro completo para criação de componentes, agora disponível pela Embarcadero, mas não é necessário entrarmos num nível de detalhes tão grande para provas de concursos (Delphi Component Writer’s Guide, Borland Delphi 7 for Windows). 2.5 DELPHI AVANÇADO: THREADS Galera, vocês viram lá na matéria de sistemas operacionais, ou mesmo estudando linguagens de programação mais a fundo, o conceito de Threads. Para aqueles que não viram, vamos a uma explicação bem sucinta para permitir o entendimento de como trabalhar com Threads no Delphi. Sistemas operacionais que permitem um ambiente multiprogramado, ou ainda, multitarefa, são caracterizados pelo pseudo-paralelismo. Vai devagar, professor, não entendi nada! Calma, padawan, explicamos logo em seguida. Aqueles um pouco mais velhos já trabalharam com computadores que tinham um processador só, ou seja, computadores monoprocessados. Mesmo naquela época, era possível rodar mais de um processo (programa) ao mesmo tempo, ou, pelo menos, muito similar a simultaneidade. Como existia só um processador, os processos tinham, cada um, um tempo específico do processador, Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 12 29 chamado de time slice. Quando o tempo de um processo A terminava, ele tinha que “sair” do processador pra dar lugar a outro processo B. Para que o processo A fosse retomado, quando sua vez chegasse novamente, ele deveria iniciar sua execução exatamente no ponto onde parou quando acabou seu tempo quando retirado do processador. Isso somente é possível com uma técnica chamada de “troca de contexto”, onde todas as informações de um processo são armazenadas na memória no momento de sua retirada do processador, e quando voltar a ser executado, ter todas essas informações de volta. Fato é que essa troca pode custar bastante em tempo, aumentando muito o tempo total de execução do processo. Uma forma de reduzir a quantidade de informações armazenadas na troca de contexto é utilizar Threads (ou processos leves) ao invés de processos completos. As Threads de um mesmo processo compartilham algumas informações, ou seja, quando há troca de contexto entre threads de um mesmo processos, ela se dá de modo muito mais rápido que threads de processos diferentes. A figura abaixo mostra quais informações são compartilhadas e quais não são por threads do mesmo processo em diferentes ambientes, multithreaded e monothreaded (esse último não permite uso efetivo de threads de um mesmo processo). Aplicações multi-threaded podem utilizar caminhos de execução paralelos, sendo cada thread criada um novo caminho. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Editalw g n i Les a mest Sie d o tn mei v lo nve s e D 13 29 Pronto, galera, isso é tudo que precisam saber sobre Threads para entender como trabalhar com elas usando Delphi! Para criar uma Thread em Delphi, a classe do usuário deve sobrescrever (override) o método Create. Para tal, a classe deve adicionar o método como construtor e escrever o código de inicialização da Thread na sua implementação. No construtor o usuário pode definir a prioridade da as Thread. Em sistemas onde isso é permitido possibilita que threads mais importantes possam ser escolhidas em detrimento de outras com prioridades mais baixas. Em Delphi, as prioridades possíveis são: Valor Prioridade tpIdle A thread só executa quando o sistema está ocioso. O Windows não vai interromper nenhuma thread para executar outra que tenha essa prioridade tpLowest Prioridade dois pontos abaixo da prioridade normal tpLower Prioridade um ponto abaixo da prioridade normal tpNormal Prioridade normal tpHigher Prioridade um ponto acima da prioridade normal tpHighest Prioridade dois pontos acima da prioridade normal tpTimeCritical Prioridade máxima. Windows vai interromper outras threads para que essa tenha prioridade na execução Um exemplo de classe para trabalhar com Threads: Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 14 29 constructor TMinhaThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); Priority := tpIdle; end; procedure TMinhaThread.PushTheButton; begin Button1.Click; end; ... procedure TMinhaThread.Execute; begin ... Synchronize(PushTheButton); ... end O método construtor Create define a prioridade das Threads criadas como tpIdle, ou seja, menor prioridade possível. O método Execute contém o código que as Threads, objetos dessa classe, vão executar. A função Synchronize espera pela thread principal para iniciar o tratamento de mensagens do Windows (pra tratar o clique do botão em PushTheButton, por exemplo) e executa o método de tratamento. 2.6 DELPHI AVANÇADO: XML Para tratar arquivos XML em Delphi deve-se utilizar o componente TXMLDocument. Os passos a seguir descrevem como esse componente trabalha diretamente com os documentos XML: 1. Adicionar o componente TXMLDocument no formulário. Esse componente aparece na página Internet na palheta de componentes 2. Aplicar a propriedade DOMVendor para especificar qual a implementação de DOM (Document Object Model) a ser utilizada para realizar o parsing (leitura, identificação de tokens e criação da estrutura hierárquica) do XML 3. Definir as opções de parsing a partir a propriedade ParseOptions 4. Se estiver trabalhando com um documento XML existente, especificar o documento: Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 15 29 • Se o XML estiver num arquivo, definir a propriedade FileName para o local • Especificar o XML como uma string, a partir da propriedade XML property. 5. Definir o valor da propriedade Active como True. Com o objeto TXMLDocument ativo, o usuário pode realizar as travessias na hierarquia dos nós do XML, bem como ler e definir seus valores. O nó raiz da hierarquia está disponível na propriedade DocumentElement. Once an XML document has been parsed by a DOM implementation, the data it represents is available as a hierarchy of nodes. Each node corresponds to a tagged element in the document. Um código exemplo para acessar uma propriedade de um nó numa estrutura XML é a que segue: Vendas := XMLDocument1.DocumentElement.ChildNodes[0]; Preco := Vendas.ChildNodes['preco'].Text; No exemplo acima temos um documento XML com nó raiz sendo armazenado em “Vendas” e o valor “Preco” recebe o valor do nó preco, filho do nó principal. Desse modo, é possível manipular documentos XML utilizando Delphi. Vamos para o último assunto nessa aula com os web modules. 2.7 DELPHI AVANÇADO: WEB MODULES Antes de apresentar o que são os web modules, precisamos conhecer os conceitos de componentes Web Broker e Web Snap. Os componentes Web Broker (localizados na aba Internet na palheta de componentes) permitem a criação de funções de tratamento de eventos associados a Uniform Resource Identifier (URI) específicos. URIs são strings que identificam univocamente um recurso, seja um arquivo, uma página web ou um serviço, estático ou dinâmico. Os componentes recebem dos clientes solicitações de recursos por meio de URIs e este pode construir um HTML ou XML para transferir de volta ao cliente como resposta. Os componentes Web Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 16 29 Broker podem ser utilizados para desenvolver componentes para aplicações de diferentes plataformas. Os componentes WebSnap incrementam os Web Broker com componentes adicionais, wizards e views, facilitando o desenvolvimento de aplicações do lado do servidor web. Esses componentes permitem a criação de páginas web mais complexas e com a possibilidade de incluir linguagens de script. Os Web modules, por sua vez, são a base para aplicações WebSnap. Toda aplicação WebSnap do lado do servidor deve ter ao menos um Web module. Existem quatro tipos de Web Module: ▪ Web application page modules (TWebAppPageModule objects) ▪ Web application data modules (TWebAppDataModule objects) ▪ Web page modules (TWebPageModule objects) ▪ Web data modules (TWebDataModule objects) Web page modules e Web application page modules provêm conteúdo para páginas web. Web data modules e Web application data modules atuam como contêineres para componentes compartilhados pela aplicação, eles servem às aplicações WebSnap da mesma forma que data modules o fazem para aplicações normais. E aí, galera, Delphi avançando daria para escrever livros e livros (como há tantos por aí!), mas temos que lembrar que nosso objetivo é conhecer o necessário para as provas de concursos. Apesar de ser uma linguagem já em bastante desuso, muitos editais ainda cobram o conteúdo pois existem muitas aplicações legadas em Delphi. Muitos dos assuntos mais avançados aqui tratados não foram cobrados em concurso ainda, não hesitem em nos enviar para comentário caso achem questões desse tipo. Vamos aos exercícios! Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D ==10ef0== 17 29 3 EXERCÍCIOS COMENTADOS: DELPHI 1. (FCC - 2009 – TRT/MG - Analista Judiciário - Tecnologia Da Informação) A primeira tela exibida quando um programa Delphi é executado, cuja exibição dura apenas alguns instantes durante a carga do programa, denomina-se tela: a) ShowModal. b) OnShow. c) de login. d) de setup. e) de splash. Comentários: Não é apenas no Delphi que chamamos esse tipo de tela de splash. É bastante comum uma telinha de apresentação para que o usuário acompanhe o carregamento. Veja o exemplo abaixo para o Word 2010. Gabarito: E 2. (CESPE - 2015 - STJ - Analista Judiciário- Desenvolvimento) Métodos callback são formas de instanciar métodos utilizando-se tecnologia de chamada em segundo plano escondido do plano sequencial da aplicação. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 18 29 Comentários: Os métodos ou funções callback são métodos passados como parâmetro para funções que obtêm dados da API Windows. Eles podem ser síncronos (plano sequencial da aplicação) ou assíncronos (segundo plano). Gabarito: E 3. (FGV - 2015 - TCE-SE - Analista De Tecnologia Da Informação - Desenvolvimento) Em um programa codificado na linguagem Delphi, a abertura do arquivo texto "arq.txt" para leitura utiliza, em sequência, as chamadas Assign(arq,"arq.txt") e Reset(arq), sendo arq uma variável do tipo text. Supondo que a opção {$IOChecks off} esteja habilitada, para saber se o arquivo foi aberto com sucesso, o programador deve: a) testar o valor retornado pela função Reset, que é do tipo boolean; b) testar o valor retornado pela função Reset, que é do tipo integer; c) testar o valor retornado pela função IOResult, que é do tipo boolean; d) testar o valor retornado pela função IOResult, que é do tipo integer; e) testar os valores retornados pelas funções Reset e IOResult, ambos do tipo integer. Comentários: Mais uma para o livro de questões decorebas, no Delphi, variáveis iniciadas com “$” indicam diretivas de compilação. A $IOChecks determina se uma operação de IO deverá lançar uma exceção quando houver erro. {$IOChecks Off} não gera a exceção, e passa a ser de responsabilidade do programador checar se a operação deu certo através da função IOResult que retorna um inteiro (0 se houve sucesso, e um número positivo em caso de erro). Gabarito: D 4. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) A diretiva $V controla a verificação de tipos em sequências curtas, que são passados como parâmetros variáveis. Comentários: Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 19 29 A diretiva $V é uma abreviação de $VarStringChecks. Esse enunciado parece estar escrito em outra língua, mas está correto. Essa diretiva define se os parâmetros do tipo short strings devem ser verificados ao serem enviados para uma subrotina. Por padrão essa verificação é habilitada, para que não seja enviada uma string longa (maior que 255 caracteres) para um parâmetro short, o que causaria erros. Gabarito: C 5. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) O TdataSource é um componente não visual da VCL (visual component library) utilizado em formulários para conectar um controle e um conjunto de dados usado pelo controle. Comentários: Certo o TdataSource é um componente de acesso a dados para controlar a conexão a um conjunto de dados. Ele não é visual, os componentes visuais são os Data Controls, como o DBGrid. Gabarito: C 6. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) Na versão 7 do Delphi, os drivers nativos para o Firebird não estão disponíveis, mas é possível acessá-los por meio de componentes dbExpress, em cuja paleta a propriedade DriverName define o driver do banco de dados utilizado. Comentários: Firebird é um tipo de base de dados. O Delphi permite a conexão a inúmeros bancos de dados através do componente dbExpress, desde que você inclua o driver que deverá utilizado. Gabarito: C 7. (CESPE - 2005 – TRT/MA - Analista Judiciário - Tecnologia Da Informação) A linguagem Delphi permite acessar os campos de um conjunto de dados por meio do objeto Tfield e seus descendentes, mas não permite a alteração de suas propriedades, que deve ser realizada pelo método Tfieldchange. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 20 29 Comentários: O objeto Tfield permite o acesso ao conjunto de dados e também a alteração de suas propriedades. O método Tfieldchange não existe. Gabarito: E 8. (CESPE - 2005 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia Da Informação) A arquitetura de banco de dados da linguagem Delphi possui componentes que representam e encapsulam, apropriadamente, informações de banco de dados. A interface do usuário interage com os dados através da origem dos dados, conectando-se a um conjunto de dados. Comentários: Vimos na aula alguns desses componentes, como o TDataSource, TDataSet e etc. Gabarito: B 9. (CESPE - 2005 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia Da Informação) O componente palette possui funcionalidades que usam o activex data objects (ADO), padrão Microsoft, para acessar banco de dados por meio do OLEDB. Comentários: Questão mal escrita. O componente palette, é a paleta de componentes, ou seja a “prateleira” que contém todos os componentes disponíveis no Delphi. Como já vimos, existem diversos tipos de conexão, como o dbExpress. O OLEDB (Object Linking and Embedding Database), é uma API desenvolvida pela Microsoft, que permite o acesso a dados de uma variedade de fontes. Por sua vez os componentes ADO facilitam a troca de dados com o servidor e o banco OLEDB e está disponível nos componentes Delphi. Gabarito: C 10. (CESPE - 2004 - TRT - 10ª REGIÃO (DF E TO) - Analista Judiciário - Tecnologia Da Informação) O código que se segue apaga um determinado elemento, aIndex, dentro de um array chamado FArray. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 21 29 Comentários: Esta procedure tem um código super complicado, mas está fácil responder, perceba que aIndex é um inteiro, não é um elemento do array, e sim o índice, que é utilizado para o cálculo do elemento que será deletado. Gabarito: E 11. (AOCP - 2012 - TCE-PA - Assessor Técnico - Analista De Sistemas) Na linguagem de programação Delphi, os arquivos com extensão “.pas”, “.dfm” e “.dpr” armazenam os códigos fontes, respectivamente, referentes a a) unidades de programa, formulário, demais unidades do projeto. b) demais unidades do projeto, unidades de programa, formulário. c) formulário, demais unidades do projeto, unidades de programa. d) recursos do projeto, formulário, todas as unidades de programa. e) todas as unidades de programa, formulário, recursos do projeto. Comentários: Os arquivos .pas contêm unidades de programa, em object Pascal, os .dfm representam formulários, e os .dpr são outras unidades do projeto. Gabarito: A Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 22 29 12. (CESGRANRIO - 2010 - ELETROBRAS - Analista De Sistemas - Engenharia De Software) Analise o fragmento de código de um sistema de controle de estoque desenvolvido em Delphi, apresentado a seguir. Nesse fragmento, qual comando deve substituir a string XXX para correto funcionamento do código? a) TextFile b) OpenTxt c)GetFile d) OpenRead e) AssignFile Comentários: Questão de sintaxe, o comando que vincula um arquivo a uma variável do tipo File (nesse caso TextFile) através de seu nome é o AssignFile. Gabarito: E Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 23 29 13. (FCC - 2016 - TRF 3ª REGIÃO (SP MS) - Técnico Judiciário - Informática) A maneira correta de se utilizar uma string na linguagem de programação indicada é: a) Delphi: Declare TestStr As String = "Tribunal Regional Federal"; if pos("Tribunal",TestStr)>0 then ShowMessage("Tribunal foi encontrado na posição "+IntToStr(pos())) else ShowMessage(" Não foi encontrado Tribunal na string"); b) C#: string msg1 = @NULL; string msg2 = System.String.Empty; string novoPath = @'c:\TRF3R\Processos'; System.String titulo = 'Tribunal Regional Federal'; c) Visual Basic: Dim TestDataTempo As Date = #1/27/2016 5:04:23 PM# Dim TestStr As String TestStr = Format(TestDataTempo, "dddd, MMM d yyyy") d) Delphi: var temp = "vazio"; const string msg = " Tribunal Regional Federal "; char[] vogais = { 'A', 'E', 'I', 'O', 'U'}; string alfabeto = new string(vogais); e) Visual Basic: Dim Str As String = 'Tribunal Regional Federal' Dim Primeira As String = Middle(TestString, 1, 3) Dim Meio As String = Middle(TestString, 14, 4) Dim Ultima As String = Middle(TestString, 5) Comentários: Questão interessante que compara as 3 linguagens. Vamos ver os erros dos itens. (a) Delphi não utiliza a sintaxe Declare X as Tipo e sim X : Tipo; (b) A forma de declaração está certa C# nas 3 primeiras linhas, realmente é “java like” “tipo x = Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 24 29 inicialização”. Mas na quarta linha, o tipo é System.String o que é errado, essa é a classe de manipulação de strings. Além disso, a inicialização com ‘@’ antes não é utilizada. O correto seria apenas null, “c:\TRF3R\Processos”, “Tribunal Regional Federal”. System.String.Empty está certo, equivale a “” (vazio); (c) Certo. Sintaxe correta do Visual Basic; (d) Essa é a sintaxe C#. Repare que var no C# indica que o compilador deve definir o tipo, nesse caso string; (e) A sintaxe de declaração Visual Basic está certa. Mas é utilizado aspa simples, o correto é aspas duplas. Além disso, o comando Middle não existe na biblioteca String, apenas em sql. A função equivalente seria Substring. Mais um detalhe é que ele utiliza uma variável TestString não declarada no trecho. Gabarito: C ACERTEI ERREI Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 25 29 4 LISTA DE EXERCÍCIOS: DELPHI 1. (FCC - 2009 – TRT/MG - Analista Judiciário - Tecnologia Da Informação) A primeira tela exibida quando um programa Delphi é executado, cuja exibição dura apenas alguns instantes durante a carga do programa, denomina-se tela: a) ShowModal. b) OnShow. c) de login. d) de setup. e) de splash. 2. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) Métodos callback são formas de instanciar métodos utilizando-se tecnologia de chamada em segundo plano escondido do plano sequencial da aplicação. 3. (FGV - 2015 - TCE-SE - Analista De Tecnologia Da Informação - Desenvolvimento) Em um programa codificado na linguagem Delphi, a abertura do arquivo texto "arq.txt" para leitura utiliza, em sequência, as chamadas Assign(arq,"arq.txt") e Reset(arq), sendo arq uma variável do tipo text. Supondo que a opção {$IOChecks off} esteja habilitada, para saber se o arquivo foi aberto com sucesso, o programador deve: a) testar o valor retornado pela função Reset, que é do tipo boolean; b) testar o valor retornado pela função Reset, que é do tipo integer; c) testar o valor retornado pela função IOResult, que é do tipo boolean; d) testar o valor retornado pela função IOResult, que é do tipo integer; e) testar os valores retornados pelas funções Reset e IOResult, ambos do tipo integer. 4. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) A diretiva $V controla a verificação de tipos em sequências curtas, que são passados como parâmetros variáveis. 5. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) O TdataSource é um componente não visual da VCL (visual component library) utilizado em formulários para conectar um controle e um conjunto de dados usado pelo controle. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 26 29 6. (CESPE - 2015 - STJ - Analista Judiciário - Desenvolvimento) Na versão 7 do Delphi, os drivers nativos para o Firebird não estão disponíveis, mas é possível acessá-los por meio de componentes dbExpress, em cuja paleta a propriedade DriverName define o driver do banco de dados utilizado. 7. (CESPE - 2005 – TRT/MA - Analista Judiciário - Tecnologia Da Informação) A linguagem Delphi permite acessar os campos de um conjunto de dados por meio do objeto Tfield e seus descendentes, mas não permite a alteração de suas propriedades, que deve ser realizada pelo método Tfieldchange. 8. (CESPE - 2005 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia Da Informação) A arquitetura de banco de dados da linguagem Delphi possui componentes que representam e encapsulam, apropriadamente, informações de banco de dados. A interface do usuário interage com os dados através da origem dos dados, conectando-se a um conjunto de dados. 9. (CESPE - 2005 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia Da Informação) O componente palette possui funcionalidades que usam o activex data objects (ADO), padrão Microsoft, para acessar banco de dados por meio do OLEDB. 10. (CESPE - 2004 - TRT - 10ª REGIÃO (DF E TO) - Analista Judiciário - Tecnologia Da Informação) O código que se segue apaga um determinado elemento, aIndex, dentro de um array chamado FArray. Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 27 29 11. (AOCP - 2012 - TCE-PA - Assessor Técnico - Analista De Sistemas) Na linguagem de programação Delphi, os arquivos com extensão “.pas”, “.dfm” e “.dpr” armazenam os códigos fontes, respectivamente, referentes a a) unidades de programa, formulário, demais unidades do projeto. b) demais unidades do projeto, unidades de programa, formulário. c) formulário, demais unidades do projeto, unidades de programa. d) recursos do projeto, formulário, todas as unidades de programa. e) todas as unidades de programa, formulário, recursos do projeto. 12. (CESGRANRIO - 2010 - ELETROBRAS - Analista De Sistemas - Engenharia De Software) Analise o fragmento de código de um sistema de controle de estoque desenvolvido em Delphi, apresentado a seguir. Nesse fragmento, qual comando deve substituir a string XXX para correto funcionamento do código? a) TextFile b) OpenTxt c) GetFile d) OpenRead e) AssignFileInserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 28 29 13. (FCC - 2016 - TRF 3ª REGIÃO (SP MS) - Técnico Judiciário - Informática) A maneira correta de se utilizar uma string na linguagem de programação indicada é: a) Delphi: Declare TestStr As String = "Tribunal Regional Federal"; if pos("Tribunal",TestStr)>0 then ShowMessage("Tribunal foi encontrado na posição "+IntToStr(pos())) else ShowMessage(" Não foi encontrado Tribunal na string"); b) C#: string msg1 = @NULL; string msg2 = System.String.Empty; string novoPath = @'c:\TRF3R\Processos'; System.String titulo = 'Tribunal Regional Federal'; c) Visual Basic: Dim TestDataTempo As Date = #1/27/2016 5:04:23 PM# Dim TestStr As String TestStr = Format(TestDataTempo, "dddd, MMM d yyyy") d) Delphi: var temp = "vazio"; const string msg = " Tribunal Regional Federal "; char[] vogais = { 'A', 'E', 'I', 'O', 'U'}; string alfabeto = new string(vogais); e) Visual Basic: Dim Str As String = 'Tribunal Regional Federal' Dim Primeira As String = Middle(TestString, 1, 3) Dim Meio As String = Middle(TestString, 14, 4) Dim Ultima As String = Middle(TestString, 5) Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D 29 29 5 GABARITOS 5.1 GABARITO: DELPHI 1 2 3 4 5 6 7 8 9 10 E E D C C C E B C E 11 12 13 14 15 16 17 18 19 20 A E C Inserir aqui o nome do Curso www.estrategiaconcursos.com.br Judah Reis Aula 08 69360 r .b m co. os s r cuon c a i ge t ra estw. w uagem de Programação p/ BRB (Analista TI) - Pós-Edital w g n i Les a mest Sie d o tn mei v lo nve s e D
Compartilhar