introdução ao desenvolvimentojtavares/adav/adav_2004_2005/a... · 2005-07-28 · introdução à...
TRANSCRIPT
Introdução à Orientação aos Objectos
(C) Paulo Sousa 1
Introdução ao Desenvolvimento .NET
Paulo SousaInstituto Superior de Engenharia do Porto
Instituto Politécnico do Porto
Índice
Plataforma .netC#Desenvolvimento
Introdução à Orientação aos Objectos
(C) Paulo Sousa 2
Plataforma .net
Introdução ao desenvolvimento .net
Visão .net
Introdução à Orientação aos Objectos
(C) Paulo Sousa 3
.net frameworkPlataforma de desenvolvimento
Máquina virtual para execução CLR (Common Language Runtime)
Biblioteca de classes.net framework Class LibraryConjunto de classes base sobre a qual se desenvolve
.net framework (2/2)
Win32Win32
MessageMessageQueuingQueuing
COM+COM+(Transactions, Partitions, (Transactions, Partitions,
Object Pooling)Object Pooling)IISIIS WMIWMI
Common Language RuntimeCommon Language Runtime
.NET Framework Class Library.NET Framework Class Library
ADO.NET: Data and XMLADO.NET: Data and XML
Web ServicesWeb Services User InterfaceUser Interface
VB C++ C#
ASP.NETASP.NET
Perl Python …
Introdução à Orientação aos Objectos
(C) Paulo Sousa 4
.net framework (namespaces)
CLR (Common Language Runtime)
.NET Framework Class Library Support.NET Framework Class Library Support
Thread SupportThread Support COM MarshalerCOM Marshaler
Type CheckerType Checker Exception ManagerException Manager
MSIL to NativeMSIL to NativeCompilersCompilers
CodeCodeManagerManager
GarbageGarbageCollectionCollection
Security EngineSecurity Engine DebuggerDebugger
Class LoaderClass Loader
Introdução à Orientação aos Objectos
(C) Paulo Sousa 5
Características CLRGestão de memória Garbage collection
Evita “perdas” de memóriaExcepções
Tratamento de erros mais eleganteType safety
Validações de compile e run time para casts e inicializações
VersioningGestão de processos e threadsSistema comum de tiposTudo são objectosOrientada aos “componentes”
“Máquina virtual”Instanciação de Common LanguageInfrastructure (CLI)
Standard ECMAUm mesmo formato de ficheiro binárioUm sistema de tipos comumMeta dadosLinguagem intermédia (MSIL)
Permite várias linguagens de programaçãoConjunto de classes base
Introdução à Orientação aos Objectos
(C) Paulo Sousa 6
Implementações CLI
Microsoft CLR
Shared Source CLIMono (Linux)Rotor (FreeBSD)
Compilação e Execução
Class LoaderClass LoaderClass Loader
JIT Compilerwith optionalverification
JIT CompilerJIT Compilerwith optionalwith optionalverificationverification
ExecutionExecution
Security ChecksSecurity Checks
EXE/DLL(MSIL and metadata)
EXE/DLL(MSIL and metadata)
ClassLibraries
(MSIL and metadata)
ClassLibraries
(MSIL and metadata)
Trusted,pre-JITedcode only
Call to anuncompiled
method
Runtime Engine
ManagedNative Code
CompilerCompiler SourceCode
SourceCode
Introdução à Orientação aos Objectos
(C) Paulo Sousa 7
AssemblyBlocos de construção de aplicaçõesUnidade fundamental de deployment, versioning, reutilização e segurançaColecção de tipos e recursosFornece meta-informação ao CLR para execuçãoTodos os tipos existem no contexto de um assemblyTipos de assembly: DLL, EXE
Aplicação .net
(Vídeo)
Introdução à Orientação aos Objectos
(C) Paulo Sousa 8
Application DomainFornecem isolamento (execução e segurança) entre aplicações diferentesPodem existir diferentes appdomain em mais que um processo (ex., IIS)
Garantia de isolamento e segurança sem overhead de criação de processoPermite comunicação entre appdomain sem overhead de IPC (mas utiliza à mesma RPC)Cada appdomain pode ser parado sem parar o processo
Appdomain & assembly
Vários assemblys são tipicamente carregados para um appdomainÉ possível partilhar código de um assembly utilizado em vários appdomainmas não os dados
Introdução à Orientação aos Objectos
(C) Paulo Sousa 9
CTS
Common Type SystemInfra-estrutura para inter-operabilidadeentre linguagens de programaçãoOrientado a objectosSuporta tipos de referência e tipos de valorCompatível com linguagens procedimentais
CTS (2/2)
Introdução à Orientação aos Objectos
(C) Paulo Sousa 10
Value-types & Reference-types
Value typesContém directamente os dadosNão pode ser null
Reference typesContém referência para objectoPode ser null
20int sp
String cp olá
Garbage Collection
(Vídeo)
Introdução à Orientação aos Objectos
(C) Paulo Sousa 11
Eventos
Mecanismo de “sinalização”Intrínseco ao frameworkextensivamente utilizado internamentePermite programação assíncronaPublish/subscribe
Componentes .netOrientada aos “componentes”
Propriedades, métodos e eventosDesign e run –timeEspecialmente vocacionados para utilização com “design surfaces” (ex., Visual Studio)
O termo componente em .net corresponde a uma classe que implementa a interface IComponent ou deriva directa ou indirectamente de System.ComponentModel.Component
Introdução à Orientação aos Objectos
(C) Paulo Sousa 12
Componentes .net (2/2)
Componentes com interface gráfica são chamados Control.Devem derivar directa ou indirectamente de System.Windows.Forms.Controlou System.Web.UI.Control
C#
Introdução ao desenvolvimento .net
Introdução à Orientação aos Objectos
(C) Paulo Sousa 13
IntroduçãoNova linguagem tendo por base o C/C++
Também vai buscar inspiração ao Java ;-)Mantém o investimento e know-how existenteCódigo mais “limpo”Construções sintáticas especiais para tirar partido do framework
Tudo são objectosFicheiros com extensão .csDeclaração e definição de métodos no mesmo ficheiro
Tipos de dadosobjectstringsbyte, short, int, longbyte, ushort, uint, ulongcharfloat, double, decimalbool
Estes tipos são alias para os tipos definidos na framework
Ex., int == System.Int32
Introdução à Orientação aos Objectos
(C) Paulo Sousa 14
Classes e namespaces
Organização do código dentro de classesClasses organizadas dentro de namespaces
namespace Demo {public class MyClass {...}
}
MétodosSintaxe semelhante ao C/C++Podem ser públicos ou privadosSuporta overloading
public class MyHelloWorld {...public void SayHello(){ ... }
private void SetTitle(String Title){ ... }
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 15
Passagem de parâmetrosPor valorPor referência
out – parâmetro de saídaref – 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
Apenas existe herança simples
public class MyClassBase {...public void Func() { ... }
}
public class MyClassDeriv : MyClassBase {...public new void Func() { base.Func(); ... }
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 16
Herança (2/2)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(); ... }
}
PropriedadesSintaxe 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(); }
}...
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 17
OperadoresAtribuição
=Relacionais
< <= > >= == !=Lógicos
&& || !Aritméticos
+ - * / %+= -= *= /= ++ --
Constantes
Pré-definidasnulltrue false
De utilizadorconst string Ver = “1.0b”;
Introdução à Orientação aos Objectos
(C) Paulo Sousa 18
Criação de objectos
// definição da classepublic class MyClass { ... }
// definição da variávelMyClass obj;
// criação do objectoobj = new MyClass();
Construtores
Seguem as regras do C/C++Mesmo nome da classeSem tipo de retornoPodem ter ou não argumentos
public class MyClass {...public MyClass() { ... }public MyClass(String Title) { ... }
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 19
ArraysSuportados ao nível da biblioteca base de classes em System.Array
// declaração do vectorString[] vec;
// criação do vectorvec = new String[10];
// número de elementos pode ser dinâmicovec = new String[n];
Ciclos// repetição n vezesfor (int x = 0; i < vec.Length; i++)
Console.WriteLine(vec[i]);
// repetição condicionalint i = 0;while (i < vec.Length){
Console.WriteLine(vec[i]); i++;
}
// enumeraçãoforeach (String x in vec)
Console.WriteLine(x);
Introdução à Orientação aos Objectos
(C) Paulo Sousa 20
Condicionais// teste de decisãoif (i < vec.Length)
Console.WriteLine(vec[i]);else
Console.WriteLine(“Erro!!!”);
// teste múltiploswitch (x){
case 1: ...; break;case 2: ...; goto case 3;case 3: ...; break;default: ...; break;
}
InterfacesSemelhantes a classes mas não têm implementação dos métodosApenas definem as assinaturasTodos os métodos são públicos
public interface IMovimentavel{void MoverEsquerda();void MoverDireita();...
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 21
Implementação de InterfacesQualquer classe pode implementar uma ou mais interfaces
public class Pessoa : IMovimentavel{void MoverEsquerda() { ... }void MoverDireita() { ... }...
}
EnumeradosFortemente “tipados”
Sem conversão automática para intSuportam operadores +, -, ++, --, &, |, ^, ~
Pode-se definir tipo de dados baseByte, short, int, long
enum Color : byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 22
structsSemelhantes a classes, excepto
Alocação na stack e não no heapNão suporta herançaCópia (atribuição) de contéudo e não de referênciaIdeal para conceitos pequenos (ex., Complex)Utilizada nos tipos primitvos da framework (ex. int)
BenefíciosComo não são alocadas no heap não colocam carga sobre o mecanismo de garbage collection
Classes e estruturasclass 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
Introdução à Orientação aos Objectos
(C) Paulo Sousa 23
delegatesPonteiros (orientados a objectos) para métodosPermite múltiplos receptores
Cada delegate tem uma lista de invocaçãoPublish/subscribe
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 XMLclass 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) {
... ...}
}
Introdução à Orientação aos Objectos
(C) Paulo Sousa 24
Desenvolvimento .Net
Introdução ao desenvolvimento .net
IDE
Visual Studio .net 2003Solução multi-projectoMulti-linguagemMultiplos tipos de projectoDebuggerGeração de código .netGeração de código nativo
Evolução do VC++ 6.0
Introdução à Orientação aos Objectos
(C) Paulo Sousa 25
Demo – Hello World
Demo - Aritmética
Introdução à Orientação aos Objectos
(C) Paulo Sousa 26
Perguntas & Respostas
Introdução ao desenvolvimento .net
Mais Informação...MSDN Library
http://msdn.microsoft.com/library
.net framework centerhttp://msdn.microsoft.com/netframework/
C#http://msdn.microsoft.com/vcsharp/
ASP.nethttp://www.asp.net
Laboratório .net do ISEP/IPPhttp://www.dei.isep.ipp.pt/labdotnet/
Introdução à Orientação aos Objectos
(C) Paulo Sousa 27
Mais Informação...
Open CLIhttp://sourceforge.net/projects/ocl
Mono (.net @ Unix)http://www.go-mono.com/
ECMAhttp://www.ecma-international.org/
Mais Informação...Introduction to C# @ ECMA
http://www.ecma-international.org/activities/Languages/Introduction%20to%20Csharp.pdf
Common Language Infrastructure @ ECMA
http://www.ecma-international.org/activities/Languages/ECMA%20CLI%20Presentation.pdf
Introdução à Orientação aos Objectos
(C) Paulo Sousa 28
Introdução ao Desenvolvimento .NET
Paulo SousaInstituto Superior de Engenharia do Porto
Instituto Politécnico do Porto
indexers
Introdução à Orientação aos Objectos
(C) Paulo Sousa 29
Eventos