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
Maquina com IIS
dot.dei.isep.ipp.pt
Cada aluno tem um directorio
47