Desenvolvimento ASP.net Desenvolvimento ASP.net Framework .net Common Language Runtime Assembly Garbage Collection Conceitos de C# Características da Linguagem Operadores e estruturas 1 Framework .net Visão .net 3 Framework .net Conjunto de tecnologias para o desenvolvimento e utilização de componentes para a criação de: Web Forms Web Services Aplicações Windows Suporta todos as fases da produção de Software Desenvolvimento Debugging Distribuição Manutenção 4 Objectivos da Microsoft: To provide a consistent object-oriented programming environment whether object code is stored and executed locally, executed locally but Internet-distributed, or executed remotely. To provide a code-execution environment that minimizes software deployment and versioning conflicts. To provide a code-execution environment that promotes safe execution of code, including code created by an unknown or semi-trusted third party. To provide a code-execution environment that eliminates the performance problems of scripted or interpreted environments. To make the developer experience consistent across widely varying types of applications, such as Windows-based applications and Web-based applications. To build all communication on industry standards to ensure that code based on the .NET Framework can integrate with any other code. .NET Framework Conceptual Overview 5 Framework .net 6 Dois componentes principais: Common Language Runtime .Net Framework class Library 7 Common Language Runtime - CLR Ambiente de execução das aplicações desenvolvidas em .Net Fornece um conjunto de serviços, ao nível das fases de desenvolvimento, de distribuição e de execução, que melhoram o desempenho da aplicação. Gere o código em tempo de execução, fornecendo serviços como: Gestão de memória Gestão de threads Execução remota Segurança de tipos de dados e código Conceito de Managed Code Máquina Virtual 8 .Net Framework 9 CLR - Arquitectura Faz a integração com a .NET Framework class library. Base Class Library (.NET Framework) Support Sequencia a distribuição dos componentes Tratamento de erros Procedimentos de segurança baseados na Thread identificação Support do utilizadorCOM Marshalerdo e na localização código Fornece classes e interfaces para Type Checker utilização de threads Exception Manager Converte código MSIL para código nativo optimizado Impede conversões inadequadas e gere o Security Engine acesso às variáveis Debug Engine Permite aplicação MSIL to Native Codefazer debug daGarbage Gestão de memória Compilers (JIT) Manager Collector (GC) Controla a execução do código Class Loader Gere a metadata e o carregamento das classes necessárias. 10 CLR - Características Common Type System Compilador Just-in-time (JIT) Evita problemas de “falta de memória disponível” Tratamento de Excepções O JIT converte o código intermédio (MSIL) em código máquina nativo optimizado Gestão de memória – Garbage Collector Especifica um conjunto de tipos de dados Permite um tratamento de erros mais elegante Gestão de Threads 11 Compilação e Execução EXE/DLL (MSIL and metadata) Compiler Source Code Class Loader Class Libraries (MSIL and metadata) JIT Compiler with optional verification Trusted, pre-JITed code only Managed Native Code Call to an uncompiled method Execution Security Checks Runtime Engine 12 Common Language Runtime managed code = MSIL + Metadata Microsoft intermediate language Metadata linguagem assembly abstracta, independente do CPU. descrição dos tipo de dados Just in time Compilation – JIT JIT usa as instruções da MSIL e Metadata para criar código máquina nativo em tempo de execução Verificação do código Managed code não é interpretado, é executado na linguagem máquina do computador 13 Just in time Compilation 14 Common Type System Common Type System Define como os tipos são declarados, usados e geridos no runtime. Fornece um modelo orientado aos objectos para suportar a implementação de várias linguagens. Define regras que as linguagens devem seguir de modo a permitir que objectos em diferentes linguagens possam interagir Value / Reference Types Todos os objectos derivam de System.Object 15 Common Type System Classificação dos tipos 16 Framework Class Library .NET Framework Class Library O namespace System é o namespace raiz dos tipos principais Organização numa hierarquia de nomes System.Collections.ArrayList representa o tipo ArrayList que pertence ao namespace System.Collections 17 Class Library- Exemplos System.Collections Contains interfaces and classes that define various collections of objects, such as lists, queues, bit arrays, hashtables and dictionaries. System.Data Contains classes that constitute most of the ADO.NET architecture. System.IO Contains types that allow synchronous and asynchronous reading and writing on data streams and files. System.Net.Mail Contains classes used to send electronic mail to a Simple Mail Transfer Protocol (SMTP) server for delivery. System.Web.UI Provides classes and interfaces that allow you to create controls and pages that will appear in your Web applications as user interface on a Web page. 18 Assembly Contêm código e metadata para o CLR Constitui-se como unidade básica de distribuição Podem ser do tipo EXE e DLL Simplifica a instalação de aplicações e gestão de versões. 19 Algoritmo “Garbage Collection” Espera que todas as threads terminem Verifica quais os objectos que estão referenciados. A memória ocupada pelos objectos não referenciados é libertada. Desloca os objectos válidos para a “compact heap” Actualiza as suas referências 20 Garbage Collection [http://w2ks.dei.isep.ipp.pt/labdotnet//files/dotnetapprentice-aspx/GarbageCollection.swf] 21 C# C# vs Java Both Java and C# have their roots in C++ and share features with that language. Both languages compile to an intermediate code rather than pure machine code. Java compiles to what is known as Java Virtual Machine (JVM) bytecode, while C# compiles to Common Intermediate Language, CIL. Java bytecode is executed by an application called the Java virtual machine (JVM). Similarly, compiled C# programs are executed by the Common Language Runtime, or CLR. [The C# Programming Language for Java Developers] 23 C# vs Java Exception handling in C# is very similar to Java, with some minor differences. C# handles run-time errors (also called exceptions) with the try...catch construct, just as in Java. The System.Exception class is the base class for all C# exception classes. Like Java, C# is strongly type checked. The compiler detects where types are used in a way that may cause errors at run time. Like Java, C# provides automatic garbage collection, freeing the programmer from keeping track of allocated resources. Both Java and C# support single inheritance and multiple interface implementations. [The C# Programming Language for Java Developers] 24 C# using System; public class HelloWorld { public static void Main() { Console.WriteLine("Hello World! "); } } 25 C# Namespace (package) Classes organizadas em namespace Agrupamento lógico de classes relacionadas using keyword para aceder a classes noutro namespace using <namespace hierarchy>.<class name>; namespace <namespacename> { class Customer { ... } } using System.Web.UI.WebControls; 26 C# Data Types C# tem todos os tipos de dados primitivos do Java Todos os tipos de dados primitivos em C# são objectos no System namespace System.Double (ou double) System.Int32 (ou int) int.Parse(...) Enums public enum Color {Green, Orange, Red, Blue} 27 Tipos de dados object string sbyte, short, int, long byte, ushort, uint, ulong char float, double, decimal bool Estes tipos são alias para os tipos definidos na framework Por exemplo, int == System.Int32 28 C# vs Java String • Em C# podem comparar-se strings com os operadores == e != • Para a concatenação de strings deve ser usada a classe StringBuilder do System.Text • Character escape com @ //Using String Literals string escapedPath = @"\\FileShare\Directory\file.txt"; 29 Métodos Sintaxe semelhante ao C/C++ Podem ser públicos ou privados Suporta overloading public class MyHelloWorld { ... public void SayHello() { ... } private void SetTitle(String Title) { ... } } 30 C# Value and Reference Types • value types – para os tipos primitivos como char, int, float • • int x=5; reference types – para classes e tipos de dados complexos. Variáveis deste tipo não contêm uma instância do tipo mas apenas uma referência para uma instância. • myClass a = new myClass(); 31 C# vs Java reference types myClass a = new myClass(); myClass b = a; 32 C# Passagem de parâmetros Por valor Por referência Com Ref e Out os argumento são passados por referência, possibilitando que a variável passada possa ser alterada no método. Ref obriga a inicializar a variável. Out não obriga a inicializar a variável class RefExample { static void Method(ref int i) { i = 44; } static void Main() { int val = 0; Method(ref val); // val is now 44 } } 33 C# foreach O ciclo foreach que permite iterar nos itens de uma classe “container” (ex. Arrays) que implemente a interface IEnumerable public static void Main() { int[] arr1= new int[] {1,2,3,4,5,6}; foreach ( int i in arr1) { Console.WriteLine("Value is {0}", i); } } 34 C# Classes Modificadores de acesso public – visível para todos protected – visível apenas para as classes derivadas private – visível apenas dentro da classe internal – visível dentro do mesmo Assembly sealed Uma classe com o modificador sealed não pode ser herdada, a sua funcionalidade não pode ser alterada por outras classes derivadas. Final em Java 35 Herança Apenas existe herança simples public class MyClassBase { ... public void Func() { ... } } public class MyClassDeriv : MyClassBase { ... public new void Func() { base.Func(); ... } } 36 C# Array int[] MyArray; // declares the array reference MyArray = new int[5]; //creates a 5 element integer array MyArray = new int[5] {1, 2, 3, 4, 5}; int[] TaxRates = {0, 20, 23, 40, 50}; int[][] multiArray = new int[2][]; Arrays são implementados como instâncias da classe System.Array System.Array.sort(MyArray); 37 C# Herança e classes derivadas Herança e implementação de Interface são definidas pelo mesmo operador : (extends e implements em Java) public class CountClass {... public virtual int StepUp() { return ++count; } } class Count100Class : CountClass { // Constructor public Count100Class(int x) : base(x) { } public override int StepUp() { return ((base.count) + 100); } 38 Criação de objectos // definição da classe public class MyClass { ... } // definição da variável MyClass obj; // criação do objecto obj = new MyClass(); 39 C# vs Java Interfaces São um contracto definindo um conjunto de funcionalidades que devem ser implementadas Não têm implementação dos métodos, apenas definem assinaturas public interface IAritmetica { float add(float op1, float op2); float sub(float op1, float op2); } public class Aritmetica: IAritmetica {...} 40 C# vs Java Overriding de métodos Um método para poder ser overriding na classe derivada tem de ser declarado com o modificador virtual Na classe derivada o método é declarado com o modificador override public class CountClass {... public virtual int StepUp() { return ++count; } } class Count100Class : CountClass { Count100Class(int x) : base(x) { } public override int StepUp() { return ((base.count) + 100); } } 41 C# Propriedades • Também chamadas de “smart fields” • Uma nova sintaxe abreviada para os métodos públicos Get e Set (accessors) de acesso a atributos privados da classe class MyClass { private int x; public void SetX(int i) { x = i; } public int GetX() { return x; } } 42 C# Definição de uma Propriedade class MyClass { private int _x; public int X { get { return _x; } set { _x = value; } }} Utilizaçao: MyClass objvar=new MyClass(); objvar.X=10; // chamada do set e passa 10 para value int y=objvar.X; // chamada do get, devolve _x 43 C# Boxing and Unboxing O processo de conversão de um tipo valor para um tipo referência é chamado boxing. O processo inverso é dito unboxing. Permite que tipos valores sejam tratados como objectos int i = 123; object o = i; Console.WriteLine(o.ToString()); 44 C# Unboxing int i = 123; // A value type object box = i; // Boxing int j = (int)box; // Unboxing 45 C# Partial Class Uma classe ou interface pode ser definida em dois ou mais ficheiros de código . Todas as partes são combinadas quando a aplicação é compilada. Útil em grandes projectos. ASP.NET 2.0 usa classes parciais para separar código de desnvolvimento do código gerado automáticamente pela Framework public partial class Employee 46