• Nenhum resultado encontrado

Introdução ao Desenvolvimento ASP.NET Paulo Sousa

N/A
N/A
Protected

Academic year: 2021

Share "Introdução ao Desenvolvimento ASP.NET Paulo Sousa"

Copied!
85
0
0

Texto

(1)

Introdução ao

Desenvolvimento

ASP.NET

Paulo Sousa

Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto

(2)

Índice

z

Plataforma .net

z

C#

z

ASP.net

z

Visual Studio.net

z

Web forms ASP.net

z

Validação de formulários

(3)

Plataforma .net

Introdução ao desenvolvimento

ASP.net

(4)
(5)

.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

(6)

.net framework (2/2)

Win32 Win32 Message Message Queuing Queuing COM+ COM+ (Transactions, Partitions, (Transactions, Partitions, Object Pooling) Object Pooling) IIS

IIS 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

(7)
(8)

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

(9)

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

(10)

“Máquina virtual”

z

Instanciação de Common Language

Infrastructure (CLI)

z Standard ECMA

z

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

(11)

Implementações CLI

z

Microsoft

Î

CLR

z

Shared Source CLI

z Mono (Linux)

(12)

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 Code

(13)

Assembly

z

Blocos de construção de aplicações

z

Unidade 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

(14)

Aplicação .net

(15)

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

(16)
(17)

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

(18)

Garbage Collection

(19)

C#

(20)

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

(21)

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

(22)

Classes e namespaces

z

Organização do código dentro de

classes

z

Classes organizadas dentro de

namespaces

namespace Demo {

public class MyClass { ...

} }

(23)

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

(24)

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

(25)

Herança

z

Apenas existe herança simples

public class MyClassBase { ...

public void Func() { ... } }

public class MyClassDeriv : MyClassBase { ...

public new void Func() { base.Func(); ... } }

(26)

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

(27)

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 m_caption; public string Caption {

get { return m_caption; }

set { m_caption = value; Repaint(); } }

... }

(28)

Operadores

z

Atribuição

z = z

Relacionais

z < <= > >= == != z

Lógicos

z && || ! z

Aritméticos

z + - * / % z += -= *= /= ++

(29)

--Constantes

z

Pré-definidas

z null

z true false

z

De utilizador

(30)

Criação de objectos

// definição da classe

public class MyClass { ... }

// definição da variável

MyClass obj;

// criação do objecto

(31)

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

(32)

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

(33)

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 (colecções)

foreach (String x in vec) Console.WriteLine(x);

(34)

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

(35)

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

(36)

Implementação de Interfaces

z Qualquer classe pode implementar uma ou

mais interfaces

public class Pessoa : IMovimentavel

{

void MoverEsquerda() { ... }

void MoverDireita() { ... }

... }

(37)

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 }

(38)

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

(39)

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

(40)

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

(41)

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

} }

(42)

ASP.net

Introdução ao desenvolvimento

ASP.net

(43)

O que é ASP.NET?

z

Sucessor do ASP

z

Páginas dinâmicas com processamento

no servidor

z Baseado no conceito de «web form»

z

Independente da linguagem de

programção

z

Independente do browser

(44)

ASP.net execution model

(45)

ASP.net application

XML Data Database Internet Internet Page1. aspx Page2. aspx Web Services Web

Services ComponentsComponents Web Forms Code-behind pages global. asax Web. config machine. config ASP.NET Web Server

Outpu

t Cache

(46)

O que são web forms?

z .aspx extension z Page attributes z @ Page directive z Atributos Body z Atributos Form

z Controlos com atributo id

<%@ Page Language="vb" Codebehind="WebForm1.aspx.cs" SmartNavigation="true"%>

<html>

<body ms_positioning="GridLayout">

<form id="Form1" method="post" runat="server"> <asp:Text id=“Text1” />

</form> </body> </html>

<%@ Page Language="vb" Codebehind="WebForm1.aspx.cs" SmartNavigation="true"%>

<html>

<body ms_positioning="GridLayout">

<form id="Form1" method="post" runat="server"> <asp:Text id=“Text1” />

</form> </body> </html>

(47)

O que é o “Code-Behind“ ?

z Separação do código e do conteúdo

z Programadores e designers UI podem trabalhar em

separado

z Controlos são objectos/variáveis acessíveis pelo ID

Form1.aspx

Form1.aspx Form1.aspxForm1.aspx

<tags>

<tags>

code

code

code

code

Separate files Single file Form1.aspx.cs Form1.aspx.cs

(48)

Como funciona o code behind

z

Criar ficheiros separados

z

Usar directiva @ Page para associar os

dois ficheiros

Page1.aspx <% @ Page Language="c#" Inherits="Project.WebForm1" Codebehind="Page1.aspx.cs" Src = "Page1.aspx.cs" %> Page1.aspx.cs

public class WebForm1 {

private void cmd1_Click() {

… } }

(49)

Mudança de Paradigma

z

JSP/ASP/PHP

z Scripts servidor (páginas dinâmicas) que

geram resultado HTML

z

ASP.NET

z Formulários com modelo de programação

próprio (semelhante aos ambientes visuais para desktop, ex., Visual Basic)

z Esconde a geração de HTML do

(50)
(51)

Visual Studio .net

Introdução ao desenvolvimento

ASP.net

(52)

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

(53)

VS.net

Toolbox Task List Solution Explorer Dynamic Help Editor/Browser Properties Server Explorer Object Browser

(54)

The Development Process

Create a Design Specification Create a Design Specification Build Build Test and Debug Test and Debug Create the Interface

and Write Code Create the Interface

and Write Code Create a

New Project Create a New Project

Visual Studio .NET

Deploy Deploy

(55)

Ficheiros

z

Solution files (.sln, .suo)

z

Project files (.vbproj, .csproj)

z

Web application files

z ASP.NET Web Forms (.aspx)

z ASP.NET Web services (.asmx)

z Classes, code-behind pages (.vb or .cs) z Global application classes (.asax)

z Web.config file

(56)

Estrutura de ficheiros de uma

aplicação Web

wwwroot wwwroot Bin Bin Inetpub Inetpub ProjectA ProjectA My Documents My Documents Development Files Development Files Assembly Files Assembly Files WebForm1.aspx WebForm1.aspx.vb (Code-behind page) Visual Studio Projects Visual Studio Projects Solution Solution Solution.sln ProjectA.vbproj ProjectA.dll Build

(57)

Web forms ASP.net

Introdução ao desenvolvimento

ASP.net

(58)

O que são web forms?

z Páginas dinâmicas com extensão aspx

z Preferencialmente com “code behind”

z Têm um modelo de objectos para programção próprio

z No formulário colocam-se controlos “server control”

z Web control z HTML control

z Esses controlos são do tipo

z Textbox z Radio z Button z List z ...

(59)

Modelo de Objectos

z

Server

z Representa o servidor web (ex, IIS)

z

Page

z Representa a própria página web

z

Request

z Representa o pedido efectuado pelo browser

z

Response

(60)

Objecto Server

z

MachineName

z

CreateObject()

z

Execute()

z

Transfer()

z

MapPath()

z

...

(61)

Classe Page

z

Controls

z

User

z

FindControl()

(62)

Objecto Request

z

Browser

z

Files

z

Form

z

ServerVariables

z

...

(63)

Objecto Response

z

ContentType

z

Expires

z

IsClientConnected

z

BinaryWrite()

z

Clear()

z

Redirect()

z

...

(64)

O que são “server controls”

z Runat="server"

z Eventos são tratados no servidor z Permite guardar estado (View state)

z Funcionalidade intrínseca

z Modelo de programação comum

z Todos possuem atributo Id e Text

z Geram HTML de acordo com o browser do

cliente

<asp:Button id="Button1" runat="server" Text="Submit"/>

<asp:Button id="Button1" runat="server" Text="Submit"/>

(65)

HTML server controls

z Baseados nos elementos

HTML

z Runat=server

z Existem no namespace

System.Web.UI.HtmlControls

<input type="text" id="txtName"

runat="server" />

<input type="text" id="txtName" runat="server" />

(66)

Web server controls

z Existem no namespace System.Web.UI.WebControls z Sintaxe asp.net z HTML gerado <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox> <asp:TextBox id="TextBox1" runat="server">Text_to_Display </asp:TextBox>

<input name="TextBox1" type="text" value="Text_to_Display"

Id="TextBox1"/>

<input name="TextBox1" type="text" value="Text_to_Display"

(67)

Que tipo de server control

user?

You need specific

functionality such as a calendar or ad rotator The control will interact with

client and server script

You are writing a page that might be used by a variety of browsers

You are working with

existing HTML pages and want to quickly add

ASP.NET Web page functionality

You prefer a Visual Basic-like programming model You prefer an HTML-like

object model

Use Web Server

Use Web Server

Controls if: Controls if: Use HTML Server Use HTML Server Controls if: Controls if:

Bandwidth is not a problem Bandwidth is limited

(68)

Demo – HTML gerado for um

web form

(69)

Ciclo de vida de uma página

Page_Load

Page_Load

Page_Unload

Page_Unload

Textbox1_Changed

Textbox1_Changed

Button1_Click

Button1_Click

Page is disposed

Page_Init

Page_Init

Control events Control events Change Events Change Events Action Events Action Events

(70)

O que são procediemntos de

evento?

z

Acções em resposta à interacção com

entre o utilizador e os controlos numa

página

(71)

Script no cliente

z

Interpretado pelo browser

z

Não tem acesso ao servidor

z

<SCRIPT language="language">

Internet

.HTM

(72)

Script no servidor

z

compilado e executado no servidor

z

Tem acesso aos recursos do servidor

z

<SCRIPT language="language“

runat="server">

Internet

.ASPX

(73)

Client-Side and Server-Side

Events

(74)

Tratamento de eventos

z

Visual Studio .NET declares variables

and creates an event procedure template

protected System.Web.UI.WebControls.Button cmd1; private void InitializeComponent()

{

this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.Load += new System.EventHandler(this.Page_Load);

}

private void cmd1_Click(object s, System.EventArgs e) { … } protected System.Web.UI.WebControls.Button cmd1;

private void InitializeComponent() {

this.cmd1.Click += new System.EventHandler(this.cmd1_Click); this.Load += new System.EventHandler(this.Page_Load);

}

(75)

Postback

(76)

Page.IsPostback

z

Evento Page_Load é executado em cada

pedido

z

Usar Page.IsPostBack para verificar se

é 1º pedido ou não

private void Page_Load(object sender, System.EventArgs e) {

if (!Page.IsPostBack) {

// executes only on initial page load }

//this code executes on every request }

private void Page_Load(object sender, System.EventArgs e) {

if (!Page.IsPostBack) {

// executes only on initial page load }

//this code executes on every request }

(77)

View state

z

Hidden ViewState control of name-value

pairs stored in the Web Form

z

On by default, adjustable at Web Form

and control level

<%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> </asp:ListBox> <%@ Page EnableViewState="False" %> <asp:ListBox id="ListName" EnableViewState="true" runat="server"> </asp:ListBox>

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

<input type="hidden" name="__VIEWSTATE" value="dDwtMTA4MzE0MjEwNTs7Pg==" />

(78)

Demo – tratamento de dados

num formulário

(79)

Tratamento de dados

z

Obter dados de um web form

z Usar as variáveis criadas automaticamente

para os controlos servidor

z Request.Form[nome-do-input]

z

Transferir execução para outra página

z Server.Transfer()

(80)
(81)

Perguntas & Respostas

Introdução ao desenvolvimento

ASP.net

(82)

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

(83)

Mais Informação...

z

Open CLI

z http://sourceforge.net/projects/ocl

z

Mono (.net @ Unix)

z http://www.go-mono.com/

z

ECMA

(84)

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

(85)

Introdução ao

Desenvolvimento

ASP.NET

Paulo Sousa

Instituto Superior de Engenharia do Porto Instituto Politécnico do Porto

Referências

Documentos relacionados

Como dito, essa foi uma das atividades de um projeto de extensão que parte do desejo dos discentes de contribuírem ativamente na elaboração de propostas de ensino, pesquisa

Dos resultados obtidos por ambos os conjuntos de dados, pode ser observado que, se há a diminuição da sobreposição (aumento de ), o número de detectores também diminui, assim como

Ela determina, além da obrigatoriedade do exame toxicológico, o tempo máximo de direção, tempo de espera, descanso, jornada de trabalho e o seguro obrigatório ao

A partir de então, as doulas e as enfermeiras obstétricas reaparecem neste cenário buscando auxiliar essas mulheres no processo de parturição, utilizando métodos

3 — São exceção ao disposto no número anterior, as reimportações referentes a anteriores importações que cum- priram o disposto no presente decreto -lei ou no Regulamento 4 —

Essa dissertação justifica-se por abordar um tema de relevância internacional, nacional e regional, por examinar os esforços da diplomacia brasileira na busca de maior

Figura 3.6: Restri¸c˜ ao de posicionamento em segmento de reta: (a) modelo de cˆ amera n˜ ao atendendo ` a restri¸c˜ ao; (b) transforma¸c˜ ao do estado inv´ alido para o estado

Como sugestão de novos estudos, indica-se a pesquisa com organizações de outros segmentos para identificar como se diferenciam as atitudes empreendedoras e as percepções dos