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
Introdução ao desenvolvimento .net
.net framework
z
Plataforma de desenvolvimento
z
Má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 desenvolve
.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
.net framework (namespaces)
CLR
(Common Language Runtime)
.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 ManagerManagerCodeCode CollectionCollectionGarbageGarbage
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
z Orientada aos “componentes”
“Máquina virtual”
z
Instanciação de Common Language
Infrastructure (CLI)
z Standard ECMAz
Um mesmo formato de ficheiro binário
z
Um 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
z
Shared Source CLI
z Mono (Linux) z Rotor (FreeBSD)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
z
Tipos de assembly: DLL, EXE
Aplicação .net
Application Domain
z
Fornecem isolamento (execução e
segurança) entre aplicações diferentes
zPodem 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 o processo
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
zOrientado a objectos
z
Suporta tipos de referência e tipos de
valor
z
Compatível com linguagens
procedimentais
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
String cp olá
Garbage Collection
Eventos
z
Mecanismo de “sinalização”
zIntrínseco ao framework
z
extensivamente utilizado internamente
zPermite programação assíncrona
z
Publish/subscribe
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
ou System.Web.UI.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 ficheiro
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
zPré-definidas
z null z true false zDe utilizador
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();
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
vec = new String[n];
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 sobre o mecanismo de garbage collection
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
Introdução ao desenvolvimento .net
IDE
z
Visual Studio .net 2003
z Solução multi-projectoz Multi-linguagem
z Multiplos tipos de projecto
z Debugger
z Geração de código .net
z Geração de código nativo
Demo – Hello World
Perguntas & Respostas
Introdução ao desenvolvimento .net
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
z http://www.ecma-international.org/Mais Informação...
zIntroduction to C# @ ECMA
z http://www.ecma-international.org/activities/Languages/Introdu ction%20to%20Csharp.pdfz
Common Language Infrastructure @
ECMA
z
http://www.ecma-international.org/activities/Languages/ECMA %20CLI%20Presentation.pdf