introdução ao desenvolvimentojtavares/adav/adav_2004_2005/a... · 2005-07-28 · introdução à...

29
Introdução à Orientação aos Objectos (C) Paulo Sousa 1 Introdução ao Desenvolvimento .NET Paulo Sousa Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto Índice Plataforma .net C# Desenvolvimento

Upload: others

Post on 27-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 2: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

Introdução à Orientação aos Objectos

(C) Paulo Sousa 2

Plataforma .net

Introdução ao desenvolvimento .net

Visão .net

Page 3: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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 …

Page 4: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 5: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 6: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 7: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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)

Page 8: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 9: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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)

Page 10: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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)

Page 11: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 12: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 13: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 14: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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){ ... }

}

Page 15: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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(); ... }

}

Page 16: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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(); }

}...

}

Page 17: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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”;

Page 18: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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) { ... }

}

Page 19: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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);

Page 20: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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();...

}

Page 21: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

}

Page 22: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 23: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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) {

... ...}

}

Page 24: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 25: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

Introdução à Orientação aos Objectos

(C) Paulo Sousa 25

Demo – Hello World

Demo - Aritmética

Page 26: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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/

Page 27: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 28: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

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

Page 29: Introdução ao Desenvolvimentojtavares/ADAV/ADAV_2004_2005/A... · 2005-07-28 · Introdução à Orientação aos Objectos (C) Paulo Sousa 3.net framework zPlataforma de desenvolvimento

Introdução à Orientação aos Objectos

(C) Paulo Sousa 29

Eventos