Ambientes Virtuais de Execução

Documentos relacionados
ESQUEMA AULA PRÁTICA 0 Familiarização com o Ambiente de Desenvolvimento NetBeans Construção do primeiro programa em java.

Orientação a Objetos - Programação em C++

Tutorial C# - Nova temporada

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Namespaces, Classes e Métodos.

Classes, Métodos e Propriedades

IDES E PROGRAMAÇÃO. Prof. Dr. Cláudio Fabiano Motta Toledo PAE: Maurício A Dias

ESQUEMA AULA PRÁTICA 1

ESQUEMA AULA PRÁTICA 1

Microsoft Visual Studio Community 2013

Engenharia de Software

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

DISTRIBUINDO SUA APLICAÇÃO

Introdução ao C# com o Microsoft Visual Studio Community 2015

Professor Leo Larback Esta apresentação pode ser baixada livremente no site

Programação 2017/2018 2º Semestre

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

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

Polimorfismo. O que é polimorfismo?

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

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Instituto Superior de Engenharia de Lisboa

Arquitecturas Alternativas. Java Virtual Machine

Aula 01. Prof. Diemesleno Souza Carvalho

No Windows há basicamente dois tipos de programas de usuário:

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

LÓGICA DE PROGRAMAÇÃO INTRODUÇÃO AO JAVA. Professor Carlos Muniz

REST. Representational State Transfer. É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades.

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

JAVA. Professor: Bruno Toledo

Revisões de PG. Programação Orientada por Objetos (POO) Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Material III-Bimestre Introdução e conceitos fundamentais da Linguagem C#

Programação Orientada a Objetos (utilizando C#) Professor Emiliano S. Monteiro Versão 12 Out/2016.

WINDOWS FORMS APPLICATION - Aplicação (Programa) que não usa a CONSOLE

USP - ICMC - SSC SSC o. Semestre 2010 Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

PRDS C#.Net Alexandre L. Silva

Pró-Reitoria Acadêmica Diretoria Acadêmica Assessoria Pedagógica da Diretoria Acadêmica

Genéricos. Profa. Thienne Johnson EACH/USP

Grupo I [5,5v] Considere o seguinte código que ilustra uma componente programática de um sistema de RPC, neste caso do SUN-RPC.

Familiarização com o ambiente de desenvolvimento da Keil Software. (uvision 51 e dscope 51)

Visual Basic.NET Image Lists, Tree e List Views, Toolbars, Status e Progress Bars e Tab Controls Lista de Exercícios

02. [Sebesta, 2000] Quais são as vantagens e as desvantagens dos tipos de dados decimais?

Laboratório 01 NetBeans

Obs.: para realizar estas atividades tenha certeza de que já tenha instalado no sistema operacional o Java JDK e o NetBeans.

Integração por Web Services

LÓGICA DE PROGRAMAÇÃO (JAVA) CLASSES E OBJETOS. Professor Carlos Muniz

A interface do Microsoft Visual Studio 2005

Fundamentos de Programação

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Bacharelado em Ciência e Tecnologia Processamento da Informação. Equivalência Portugol Java. Linguagem Java

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

9 Classes Abstractas e Interfaces

Fabiano Moreira.

Fundamentos de Programação 2

Publicar uma aplicação ASP.NET Core com base de dados SqlServer no Azure usando Visual Studio e um perfil para publicação (publish profile)

O AMBIENTE DE DESENVOLVIMENTO

Carlos Eduardo Batista. Centro de Informática - UFPB

Lição 7 Array em Java

Aplicação MVC com Class Library

Licenciatura em Informática

Manual de Instalação PRIMAVERA WINDOWS SERVICES V1.0 SR2

Implementação da programação modular II

Array em Java. Figura 1 - Exemplo de um array de inteiros

Engenharia de Software

Programação em Sistemas Computacionais

Criação de uma aplicação Web ASP.NET MVC 4

Linguagem de Programação Visual

Esta é a única declaração da aplicação

Sintaxe da linguagem Java

Tarefa Orientada 3 Aplic. Manutenção de Produtos Text Box

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Objectivos: Criar um programa de instalação do projecto desenvolvido

Trabalho Prático Nº1 Introdução ao C#.NET

Introdução. Por que desenvolver ALGORITMO?

Programação por Objectos. Java

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Familiarização com a ferramenta JavaCC

Tarefa Orientada 4 Aplic. Manutenção de Produtos - ComboBox

Problema do Caminho Hamiltoniano

Programação 2010/2011 MEEC

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Programação em C#.Net 4.0 com Mobile Apps

A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)

CAP. VI ANÁLISE SEMÂNTICA

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Algoritmia e Programação APROG. Tecnologia JAVA. IDE Netbeans. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Polimorfismo e Ligação Dinâmica. Alcides Pamplona Polimorfismo e Ligação Dinâmica

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Programação em VB.Net 4.0 com Mobile Apps

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Apresentação da plataforma.net. Ambientes Virtuais de Execução. Semestre de Verão, 12/13

Relacionamentos entre objetos

4 Conceito de Herança

Transcrição:

Ambientes Virtuais de Execução Semestre Inverno 2012/13 Trabalho Final 1 Objectivos Este trabalho tem como objectivo a consolidação de conhecimentos dos mecanismos e construções do sistema de tipos do.net estudados nas aulas teóricas, nomeadamente a utilização de delegates, eventos, genéricos e reflexão. 2 Introdução Com o presente trabalho pretende-se desenvolver uma aplicação Windows Forms com funcionalidades de edição, compilação e execução de programas escritos na linguagem C#. A aplicação deverá suportar os seguintes requisitos: Capacidade de edição de ficheiro contendo código C#. Compilação (modo manual ou modo automático) para EXE ou DLL do ficheiro corrente. Os erros de compilação deverão ser apresentados no editor. Capacidade de Code Completion (funcionalidade equivalente ao Intellisense do Visual Studio), isto é, quando for digitado o caráter. deverá ser apresentada uma lista dos membros do objeto implícito ou, no caso de se tratar de um tipo, a lista de membros estáticos desse tipo. Exemplos: Se for digitado System.Console., deverá ser apresentada a lista de membros estáticos do tipo System.Console. Se for digitado: struct X { int i; X xval; xval. deverá ser apresentada a lista de membros de instância do tipo X; Execução do assembly caso este tenha um entry point (assembly EXE). A figura 1 ilustra o aspeto gráfico da aplicação, e também o resultado da execução de um ficheiro produzido no editor. Na secção 3 serão fornecidos elementos sobre a implementação de cada funcionalidade. 1

3 Descrição 3.1 Editor Figura 1: Aspeto gráfico da aplicação e resultado de selecionar a opção Run.... O editor é composto por quatro componentes: Tool bar Contém componentes para manipular: referências do assembly (combo box Assembly References e botões + e - ), compilar ficheiro fonte e executar assembly resultante (botões Compile... e Run... ), e botões para gestão dos ficheiros (botões New..., Load... e Save... ). Área de edição É utilizado o componente System.Windows.Forms.RichTextBox. Visualização de erros É também utilizado o componente RichTextBox, mas sem capacidade de edição. Status bar Visualização da linha e coluna do cursor no editor e visualização de mensagens de estado (por exemplo: ficheiro foi carregado no editor, o texto presente no editor foi gravado em ficheiro, entre outras). 3.2 Compilação Para compilar o ficheiro fonte C# deverá utilizar o tipo CSharpEditor.CompilerServices.Compiler (disponibilizado no anexo a este documento), que permite invocar programaticamente o compilador de C#. 3.3 Code Completion Como foi referido anteriormente, sempre que for digitado o caráter. deverão ser apresentados os membros do objeto ou tipo implícitos na consulta. Para apresentar esta lista poderá usar o componente ListBox, disponível no namespace System.Windows.Forms. A lista de membros é obtida fazendo introspeção ao código. Para esse efeito, deverá compilar o código ignorando a expressão de consulta presente na linha 2

Figura 2: Utilização da funcionalidade Code completion. corrente (pois está incompleta) e produzir o assembly a partir do restante código; de seguida, deverá obter, via instrospeção ao assembly compilado no passo anterior, os membros do objeto ou tipo. A figura 2 ilustra a utilização da funcionalidade Code completion para obter a lista de membros da variável p, do tipo Test.Program. Assuma que as variáveis locais são declaradas da seguinte forma: cada declaração de variável aparece numa linha distinta e a variável não é iniciada na declaração. Por isso, uma declaração de variável local tem a forma simplificada: <Type identifier> <Variable identifier> ;. Assuma também que a expressão de consulta consiste numa única linha contendo o código <Variable identifier>. ou <Type identifier>.. Além de permitir fazer Code Completion de membros de variáveis locais declaradas da forma enunciada no parágrafo anterior, deve ser dado o suporte de Code Completion sobre nomes que podem ser obtidos por introspeção (parâmetros do método, membros de instância e estáticos e nomes de tipos). Na secção seguinte são apresentados exemplos relativos a este ponto. 3.3.1 Obtenção do tipo das variáveis existente no código fonte Para obter a lista de membros a partir da consulta <Variable identifier>. ou <Type identifier>., terá que determinar o tipo do identificador. No exemplo apresentado anteriormente, struct X { int i; X xval; xval. o tipo da variável local xval é X. Na consulta System.Console. o tipo é System.Console. No caso de instropeção a uma variável local, o tipo é determinado fazendo uma análise sintática (parsing) ao código 3

fonte do método onde a variável foi declarada. Por simplicidade assume-se que as consultas sobre variáveis locais são sempre realizadas no scope onde as variáveis são declaradas. Continuando com o exemplo anterior, outras consultas possíveis incluem: struct X { int i; args. // Apresenta lista de membros do parâmetro args // Ou: Prog.CoordX. // Apresenta lista de membros do campo CoordX // Ou: public void Process() { val. // Apresenta lista de membros do campo this.val 3.3.2 Introspeção do assembly compilado A operação de Code Completion (usando o caráter. sobre uma variável ou tipo) resulta na compilação do ficheiro e posterior análise aos membros do tipo via introspeção do assembly. No entanto, na altura em que é realizado load ao assembly, a aplicação faz lock (Read lock) sobre o assembly, não permitindo atualizações posteriores a este ficheiro decorrentes de novas compilações que venham a ser realizadas. Para solucionar este problema, o código de inspeção do assembly deve ser executado num outro Application Domain, contruído com a opção Shadow copying ativada. Esta opção permite especificar que todos os assemblies presentes na diretoria base do Application Domain sejam copiados para outra diretoria. O troço de código seguinte ilustra a configuração desta opção: var setup = new AppDomainSetup { ApplicationName = "", ApplicationBase = < probing path >, ShadowCopyFiles = " true ", ShadowCopyDirectories = < probing path > [ CachePath = "D :\\ AnyPath \\ " ] ; A string <probing path> especifica a diretoria de onde se quer fazer shadow copying, por exemplo, a diretoria bin\degug da aplicação. O atributo CachePath é opcional na utilização; se não for especificada (opção recomendada), é usada uma cache própria que é gerida automaticamente pelo CLR. Este objecto setup é passado na construção do Application Domain. 3.4 Execução da aplicação Para executar a aplicação compilada, poderá usar o troço de código: var proc = new Process () ; proc. StartInfo. FileName = " something. exe "; proc. Start () ; proc. WaitForExit () ; var exitcode = proc. ExitCode ; proc. Close () ; Se pretender usar a consola, pode usar o seguinte código no evento Load da aplicação windows forms: 4

namespace CSharpEditor { public partial class CSharpEditorForm : Form { [ DllImport (" Kernel32. dll ")] static extern Boolean AllocConsole () ; private void C Shar pedi torf orm_ Loa d ( object sender, EventArgs e) { if (! AllocConsole () ) MessageBox. Show (" Failed to alloc console ");... 4 Código disponibilizado Como anexo a este documento, é disponibilizada uma solução do Visual Studio (VS2010), contendo o projeto: CSharpEditor Projecto onde deverão ser desenvolvidos os tipos que constituem a implementação. É disponibilizado o seguinte código base: interface gráfica da aplicação Windows Forms; deteção do caráter. e apresentação de uma List box na vizinhança do. ; atualização do status bar; implementação do tipo CSharpEditor.CompilerServices.Compiler e exemplos de utilização. 5 Testes Unitários No desenvolvimento do projecto sugere-se a utilização do framework de testes unitários NUnit (http: //www.nunit.org). O NUnit não está integrado no VS2010. Para integrar a execução dos testes sugerese a seguinte opção: Instalar e referenciar no projecto o assembly nunit.framework.dll. Instalar o plugin ReSharper (em http://www.jetbrains.com/resharper/download). Neste caso apenas está disponível uma versão de avaliação com licença para 30 dias. Quem estiver interessado em obter a licença anual atribuída ao ISEL, deverá contatar o docente. 6 Avaliação Na avaliação do trabalho são levados em conta os seguintes aspetos: organização e qualidade da solução; qualidade do relatório; teste dos componentes. 7 Prazo de Entrega O prazo de entrega do trabalho (relatório e código fonte) é o dia 16 de Fevereiro de 2013. 5 ISEL, 14 de Dezembro de 2012.