Introdução ao
Desenvolvimento .NET
Paulo Sousa
Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto
Índice
z
Plataforma .net
zC#
Plataforma .net
.net framework
z
Plataforma de desenvolvimento
zMáquina virtual para execução
z CLR (Common Language Runtime)
z
Biblioteca de classes
z .net framework Class Library
z Conjunto de classes base sobre a qual se
.net framework (2/2)
Win32 Win32 Message Message Queuing Queuing COM+ COM+ (Transactions, Partitions, (Transactions, Partitions, Object Pooling) Object Pooling) IISIIS WMIWMI
Common Language Runtime
Common Language Runtime
.NET Framework Class Library
.NET Framework Class Library
ADO.NET: Data and XML
ADO.NET: Data and XML
Web Services
Web Services User InterfaceUser Interface VB C++ C#
ASP.NET
ASP.NET
CLR
.NET Framework Class Library Support
.NET Framework Class Library Support
Thread Support
Thread Support COM MarshalerCOM Marshaler
Type Checker
Type Checker Exception ManagerException Manager
MSIL to Native MSIL to Native Compilers Compilers Code Code Manager Manager Garbage Garbage Collection Collection Security Engine
Security Engine DebuggerDebugger
Class Loader
Características CLR
z Gestão de memória Æ Garbage collection
z Evita “perdas” de memória
z Excepções
z Tratamento de erros mais elegante
z Type safety
z Validações de compile e run time para casts e
inicializações
z Versioning
z Gestão de processos e threads z Sistema comum de tipos
z Tudo são objectos
“Máquina virtual”
z
Instanciação de Common Language
Infrastructure (CLI)
z Standard ECMA
z
Um mesmo formato de ficheiro binário
zUm sistema de tipos comum
z
Meta dados
z
Linguagem intermédia (MSIL)
z Permite várias linguagens de programação
Implementações CLI
z
Microsoft
Î
CLR
zShared Source CLI
z Mono (Linux)
Compilação e Execução
Class Loader Class Loader Class Loader JIT Compiler with optional verification JIT Compiler JIT Compiler with optional with optional verification verification Execution Execution Security Checks Security Checks EXE/DLL (MSIL and metadata) EXE/DLL (MSIL and metadata) Class Libraries (MSIL and metadata) Class Libraries (MSIL and metadata) Trusted, pre-JITed code only Call to an uncompiled method Runtime Engine Managed Native Code Compiler Compiler Source Code Source CodeAssembly
z
Blocos de construção de aplicações
zUnidade fundamental de deployment,
versioning, reutilização e segurança
z
Colecção de tipos e recursos
z
Fornece meta-informação ao CLR para
execução
z
Todos os tipos existem no contexto de
um assembly
Aplicação .net
Application Domain
z
Fornecem isolamento (execução e
segurança) entre aplicações diferentes
z
Podem existir diferentes appdomain em
mais que um processo (ex., IIS)
z Garantia de isolamento e segurança sem
overhead de criação de processo
z Permite comunicação entre appdomain sem
overhead de IPC (mas utiliza à mesma RPC)
z Cada appdomain pode ser parado sem parar
Appdomain & assembly
z
Vários assemblys são tipicamente
carregados para um appdomain
z
É possível partilhar código de um
assembly utilizado em vários appdomain
mas não os dados
CTS
z
Common Type System
z
Infra-estrutura para inter-operabilidade
entre linguagens de programação
z
Orientado a objectos
z
Suporta tipos de referência e tipos de
valor
z
Compatível com linguagens
Value-types & Reference-types
z
Value types
z Contém directamente os dados
z Não pode ser null
z
Reference types
z Contém referência para objecto
z Pode ser null
20
int sp
Garbage Collection
Eventos
z
Mecanismo de “sinalização”
zIntrínseco ao framework
z
extensivamente utilizado internamente
zPermite programação assíncrona
Componentes .net
z Orientada aos “componentes”
z Propriedades, métodos e eventos z Design e run –time
z Especialmente vocacionados para utilização com
“design surfaces” (ex., Visual Studio)
z O termo componente em .net corresponde a
uma classe que implementa a interface
IComponent ou deriva directa ou
indirectamente de
Componentes .net (2/2)
z
Componentes com interface gráfica são
chamados Control.
z
Devem derivar directa ou indirectamente
de
System.Windows.Forms.Control
C#
Introdução
z Nova linguagem tendo por base o C/C++
z Também vai buscar inspiração ao Java ;-)
z Mantém o investimento e know-how existente z Código mais “limpo”
z Construções sintáticas especiais para tirar partido do
framework
z Tudo são objectos
z Ficheiros com extensão .cs
z Declaração e definição de métodos no mesmo
Tipos de dados
z object z string
z sbyte, short, int, long z byte, ushort, uint, ulong z char
z float, double, decimal z bool
z Estes tipos são alias para os tipos definidos na framework
Classes e namespaces
z
Organização do código dentro de
classes
z
Classes organizadas dentro de
namespaces
namespace Demo {
public class MyClass { ...
} }
Métodos
z Sintaxe semelhante ao C/C++
z Podem ser públicos ou privados
z Suporta overloading
public class MyHelloWorld { ...
public void SayHello() { ... }
private void SetTitle(String Title) { ... }
Passagem de parâmetros
z Por valor
z Por referência
z out – parâmetro de saída
z ref – parâmetro de entrada e saída
public void func1(int x) { ... }
public void func2(out int x) { ... }
public void func2(ref int x) { ... }
Herança
z
Apenas existe herança simples
public class MyClassBase { ...
public void Func() { ... } }
public class MyClassDeriv : MyClassBase { ...
public new void Func() { base.Func(); ... } }
Herança (2/2)
z
Métodos não são virtuais por defeito
public class MyClassBase { ...
public virtual void Func() { ... } }
public class MyClassDeriv : MyClassBase { ...
public override void Func() { base.Func(); ... }
Propriedades
z Sintaxe alternativa para acesso a membros de
dados da classe mas com as vantagens dos métodos
public class Button : Control {
private string caption; public string Caption {
get { return caption; }
set { caption = value; Repaint(); } }
... }
Operadores
zAtribuição
z = zRelacionais
z < <= > >= == != zLógicos
z && || ! zAritméticos
z + - * / % z += -= *= /= ++--Constantes
z
Pré-definidas
z null
z true false
z
De utilizador
Criação de objectos
// definição da classe
public class MyClass { ... }
// definição da variável
MyClass obj;
// criação do objecto
Construtores
z
Seguem as regras do C/C++
z Mesmo nome da classe
z Sem tipo de retorno
z Podem ter ou não argumentos
public class MyClass { ...
public MyClass() { ... }
public MyClass(String Title) { ... } }
Arrays
z
Suportados ao nível da biblioteca base
de classes em
System.Array
// declaração do vector
String[] vec;
// criação do vector
vec = new String[10];
// número de elementos pode ser dinâmico
Ciclos
// repetição n vezes
for (int x = 0; i < vec.Length; i++) Console.WriteLine(vec[i]);
// repetição condicional int i = 0;
while (i < vec.Length) {
Console.WriteLine(vec[i]); i++;
}
// enumeração
foreach (String x in vec) Console.WriteLine(x);
Condicionais
// teste de decisão if (i < vec.Length) Console.WriteLine(vec[i]); else Console.WriteLine(“Erro!!!”); // teste múltiplo switch (x) { case 1: ...; break;case 2: ...; goto case 3; case 3: ...; break;
default: ...; break; }
Interfaces
z Semelhantes a classes mas não têm
implementação dos métodos
z Apenas definem as assinaturas
z Todos os métodos são públicos
public interface IMovimentavel {
void MoverEsquerda(); void MoverDireita(); ...
Implementação de Interfaces
z Qualquer classe pode implementar uma ou
mais interfaces
public class Pessoa : IMovimentavel
{
void MoverEsquerda() { ... }
void MoverDireita() { ... }
... }
Enumerados
z Fortemente “tipados”
z Sem conversão automática para int
z Suportam operadores +, -, ++, --, &, |, ^, ~
z Pode-se definir tipo de dados base
z Byte, short, int, long
enum Color : byte { Red = 1,
Green = 2, Blue = 4, Black = 0,
White = Red | Green | Blue }
structs
z Semelhantes a classes, excepto
z Alocação na stack e não no heap z Não suporta herança
z Cópia (atribuição) de contéudo e não de referência z Ideal para conceitos pequenos (ex., Complex)
z Utilizada nos tipos primitvos da framework (ex. int)
z Benefícios
z Como não são alocadas no heap não colocam carga
Classes e estruturas
class CPoint { int x, y; ... } struct SPoint { int x, y; ... } SPoint sp = new SPoint(10, 20); CPoint cp = new CPoint(10, 20);
10 20 10 10 CPoint sp cp
delegates
z Ponteiros (orientados a objectos) para métodos
z Permite múltiplos receptores
z Cada delegate tem uma lista de invocação z Publish/subscribe
z Base para o mecanismo de eventos
delegate void MouseEvent(int x, int y);
delegate double Func(double x); Func fn = new Func(Math.Sin); double x = fn(1.0);
Comentários XML
class XmlElement{
/// <summary>
/// Returns the attribute with the given name and /// namespace</summary>
/// <param name="name">
/// The name of the attribute </param> /// <param name="ns">
/// The namespace of the attribute, or null if /// the attribute has no namespace</param>
/// <return>
/// The attribute value, or null if the attribute /// does not exist</return>
/// <seealso cref=" ="GetAttr(string)"/>
public string GetAttr(string name, string ns) { ... ...
} }
Desenvolvimento .Net
IDE
z
Visual Studio .net 2003
z Solução multi-projecto
z Multi-linguagem
z Multiplos tipos de projecto
z Debugger
z Geração de código .net
z Geração de código nativo
Perguntas & Respostas
Mais Informação...
z MSDN Library
z http://msdn.microsoft.com/library
z .net framework center
z http://msdn.microsoft.com/netframework/
z C#
z http://msdn.microsoft.com/vcsharp/
z ASP.net
z http://www.asp.net
z Laboratório .net do ISEP/IPP
Mais Informação...
z
Open CLI
z http://sourceforge.net/projects/ocl
z
Mono (.net @ Unix)
z http://www.go-mono.com/
z
ECMA
Mais Informação...
z
Introduction to C# @ ECMA
z
http://www.ecma-international.org/activities/Languages/Introdu ction%20to%20Csharp.pdf
z
Common Language Infrastructure @
ECMA
z
http://www.ecma-international.org/activities/Languages/ECMA %20CLI%20Presentation.pdf