|
|
8月29日 Pessoal, como falei na reunião da célula desta semana estou postando o assunto abordado durante a reunião. Boa leitura e bons estudos.
Plataforma
.NET – Funcionamento e Arquitetura
Para permitir uma maior integração entre as
linguagens que suportam a plataforma .NET, foi criado o CLS (Common Language Specification).
O CLS é uma especificação comum que contém as funcionalidades básicas
necessárias para as linguagens, ou seja, a CLS define funcionalidades que todas
as linguagens possuem. Uma linguagem para ser considerada dentro da
plataforma deve aderir as especificações
da CLS e CTS. Assim ela poderá ser “nomeada” como X.NET.
Funcionamento - Processo de compilação
Na
plataforma .NET o código é duplamente compilado:
Primeira compilação
Ao compilarmos nosso código para gerar uma
DDL, ou um arquivo EXE, o compilador da linguagem em que trabalhamos é chamado
e este transforma nosso código em uma linguagem chamada MSIL (Microsoft Intermediate
Language), esta linguagem é semelhante ao Assembly x86. Qualquer código
compilado em .NET é chamado de assembly.
Segunda compilação
A
segunda compilação é feita no momento em que o aplicativo é executado pela
primeira vez ou quando sua DLL é referenciada pela primeira vez. O .NET Framework, através do CLR(Common
Language Runtime) chama o compilador Just-in-Time (JIT compiler) que compila o
código MSIL em código nativo do computador. O JIT compila o código
sob demanda e joga o código resultante em cache, de forma que esse código não
precise ser recompilado quando houver uma nova invocação do mesmo método.
Percebemos
então que não importa se o MSIL veio de C#, VB.NET ou de COBOl já que é a mesma
linguagem(MSIL). Uma observação importante é que C++
nos permite compilar diretamente para a
arquitetura que queremos e pular todos os de MSIL e JIT

O JIT compila para o processador,
vista disso podemos dizer que há um ganho de performance, visto que ele gera o
cógido para a arquitetura especifica, assim não teremos problemas com diferentes
versões de processadores.
Arquitetura

Common
Language Runtime (CLR)
É o ambiente de execução das aplicações .NET, a base de toda
arquitetura da plataforma. Funciona como uma aplicação em plano de fundo que
gerencia, aloca e desaloca memória, carrega os APIs necessários e executa o
código. O CLR
cuidará do gerenciamento de memória através do Garbage Collector.
Abriga o JIT Compiler um componente que interpreta a IL e gera a
linguagem de máquina na arquitetura do processador. Sem o CLR não
há execução do código .NET por isso é necessário a instalação do .NET
Framework.
.NET
Class Library
Conjunto de funcionalidades prontas para facilitar o desenvolvimento e
evitar reescrita de código. Na Class Library temos as APIs (Application
Programming Interface ou Interface de Programação de Aplicativos ) para acesso
a Banco de Dados (ADO.NET), programação para Web (ASP.NET), segurança,
comunicação, etc. Para permitir uma melhor organização do código a Class
Library é toda organizada em namespace.

|
Class Library Support
|
Faz a integraçãocom a .NET Class Library
|
|
Thread
Support
|
Fornece classes e interfaces para a
ultilização de thread
|
|
COM
Marshaler
|
Permite que objetos COM sejam usados em
.NET e vice-versa
|
|
Type
Checked
|
Não permite casts inseguros. Fortemente
tipado
|
|
Exception Manager
|
|
|
Security Engine
|
|
|
Debug Engine
|
Permite debug e tracing
|
|
IL
to Native Compilers
|
Converte MSIL para código nativo
(compilação JIT)
|
|
Code
Manage
|
Gerencia a execução do código
|
|
Garbage
Collector
|
Gerencia o tempo de vida dos objetos,
apagando da memória objetos que não são mais importantes
|
|
Class
Loader:
|
Carrega os componetes que serão usados na
memória e gerencia meta-dados
|
Namespace : Organização
lógica do código do sistema, permite que o código seja dividido em partes para
melhor compreensão da aplicação. Vale salientar que a organização é lógica e
não física, podemos ter um sistema todo em um único assembly, mas com vários
namespaces no mesmo arquivo ou até mesmo um único nmamespace dividido entre
vários assemblies. Com o uso do namespace podemos, por exemplo, colocar todo o
código rede referente a interface gráfica em um um namespace chamado “GUI”,
outro namespace pode conter todo o
código refrente ao acesso ao bando de dados, chamando-o de “Dados”.Toda .NET
Class Library está organizada em namespaces hierárquicos. O namespace principal
é o System, que contem tipos primitivos da linguagem, funcionalidades que nos
permite ler e escrever na tela, converter tipos, etc.
CTS (Common Type System)
É a definição de tipos de dados onde tudo é um objeto e deriva da classe
System.Object, que é o núcleo do sistema de tipos. Pensando que tudo é um
objeto, logo tudo deriva da classe System.Object e, por isso, os projetistas da
.NET organizaram o sistema de tipos de dados de duas formas:
- Tipos Valor: variáveis
deste tipo são alocadas na pilha e têm como classe base System.ValueType,
que por sua vez deriva da System.Object.
- Tipos Referência: variáveis
deste tipo são alocadas na memória heap e têm a classe System.Object como
classe base.
-- System.Object
--Tipos valor
------ Estruturas
------ Tipos Enumerados
-- Tipo Referência
------ Objeto
------ Interface
------ Ponteiros
CLS
(Common Language Specification)
Define um
conjunto de regras que as linguagens que implementam a .NET devem seguir para
que a CLR possa gerar a IL. Esse é um dos motivos de podermos criar sistemas em
diferentes linguagens e interagir entre elas dentro da .NET. No momento da
compilação é gerado um código único intermediário (IL) e todas essas linguagens
suportadas pela .NET seguem as regras da CLS, para que depois de gerado a IL,
ela seja interpretada corretamente pela CLR, como já dito acima.
VES
(Virtual Execution System )
É um processo de compilação
e é aqui onde o JIT é ativado quando uma aplicação .NET é chamada. O Windows
identifica que esta é uma aplicação .NET e uma runtime Win32 passa o controle
para a runtime do .NET. Neste momento a compilação do Portable Executable é efetuada e só então o código assembly
próprio da arquitetura do processador é gerado para que a aplicação possa ser
executada.
Portable Executable
Isto significa que o fonte
gerado poderá ser interpretado (executado) em qualquer plataforma que tenha
suporte .NET, sem necessidade de recompilação do fonte.
Anexo
1 . Principais Namespaces do .NET Class Library
|
Namespace
|
Descrição
|
|
System
|
Este namespace é a raiz dos tipos de baixo-nível requerido pelo .Net
Framework. Contém classes fundamentais e básicas que definem valores e
referências de tipos de dados usados rotineiramente, além de processamento de
exceções, interfaces e eventos.
|
|
System.CodeDom
|
Namespace que contém classes que podem ser utilizadas pra representar
os elementos e estruturas de um documento de código-fonte.
|
|
System.Collections
|
Possui interfaces e classes que definem várias coleções de objetos,
como listas, filas, array de bits e também dicionários.
|
|
System.ComponentModel
|
Este namespace possui classes que são usadas para implementar o
comportamento do ambiente de tempo de execução e tempo de design de
componentes e controles.
|
|
System.Configuration
|
Fornece classes e interfaces que permitem o acesso programático às
configurações do .Net Framework e manipular erros nos arquivos de
configuração.
|
|
System.Data
|
Namespace que contém classes necessárias para acessar e manipular
banco de dados.
|
|
System.EnterpriseServices
|
Namespace que fornece uma infra-estrutura importante para aplicações
da empresa. O COM+ fornece uma arquitetura dos serviços para os modelos de
programação do componente distribuído em um ambiente de empresa. O principal
objetivo do namespace é fornecer objetos .Net e o acesso aos serviços do
COM+, tornando os objetos .Net mais práticos para aplicações da empresa.
|
|
System.Globalization
|
Namespace com classes que definem informação relacionada à cultura,
incluindo a linguagem, o país, a região, os calendários em uso, os padrões de
formatos de datas, moeda corrente, números e ordens para ordenção de strings.
|
|
System.IO
|
Neste namespace temos classes responsáveis para a leitura e gravação
de arquivos.
|
|
System.Messaging
|
Fornece para o programador classes que aceitam que você se conecte,
monitore e administre as filas de mensagem na rede, além de enviar, receber e
resgatar mensagens.
|
|
System.Net
|
Namespace que fornece uma simples interface de programação para
diversos protocolos utilizados em rede atualmente, assim você pode
desenvolver aplicações que usem recursos de internet sem se preocupar sobre
os detalhes específicos de protocolos individuais.
|
|
System.Reflection
|
Contém classes e interfaces que fornecem uma visão gerenciada dos
tipos, métodos e campos com a habilidade para dinamicamente criar e invocar
tipos.
|
|
System.Resorces
|
Importante namespace que fornece classes que permitem ao programador
ou desenvolvedor criar, gravar e gerenciar recursos utilizados na aplicação.
|
|
System.Security
|
Fornece a estrutura subjacente do sistema de segurança do CLR,
incluindo classes bases para permições.
|
|
System.Threading
|
Contém classes que permitem a implementação de multithreading dentro
de suas aplicações.
|
|
System.Timers
|
Fornece um componente Timer que permite a você disparar um determinado
evento em um intervalo de tempo especifico.
|
|
System.Web
|
Fornece classes e interfaces que permitem a comunicação cliente, que
se dá através do browser, e servidor, que se da através do servidor IIS. O
namespace ainda fornece diversas outras classes com diversas características.
|
|
System.Windows.Forms
|
Namespace que contém classes capazes de criar aplicações baseadas em
Windows que podem utilizar a vantagem da disponibilidade de funcionalidades
para aplicações com clientes.
|
|
System.XML
|
Fornece suporte para a utilização de arquivos ou objetos XML.
|
|
System.Drawing
|
Namespace que fornece funcionalidades da GDI+ e fornece classes que
facilitam a renderização de gráficos.
|
8月23日
Orientação a objeto
Vamos imaginar a
construção de uma bicicleta, para tanto precisamos saber suas características,
formas, propriedades, ações. Temos então que montar um projeto que conterá
essas informações, a esse projeto chamamos de Classe. Uma bicicleta é composta
por roda, aro,freio, jante, quadro, etc. Temos que colocar no projeto (classe)
essas características. Cada uma dessas características é chamado de atributo,
as ações definidas para a bicicleta, como andar, frear são definidas por meio de métodos.
Quando falamos de
uma bicicleta esta pode ser qualquer bicicleta existente, temos então o
conceito de bicicleta. Quando passamos a pegar características como cor,
formato, tamanho, estamos especificando a bicicleta que queremos. Temos assim
bicicleta como conceito e a bicicleta como suas características, sua instância.
Instância é a representação de um modelo.
Vantagens de OO
- Maior reuso do código
- Organização do código
- Coisas naturais em um mundo virtual
Objeto
- Todo objeto possui características (atributos)
- Objetos são gerados de um modelo. Logo, objetos são instâncias
de classes, ou seja, objetos são representações de modelos, esses modelos
são as classes.
- Objetos interagem entre si.
- Por exemplo, objeto pessoa interage como objeto cadeira através
do método empurrar
- Métodos e propriedades : maneiras de mandar mensagem para
o objeto
- Método: bloco de código que representa uma ação unitária
de um objeto. Pode manipular variáveis dentro do escopo do método
(variáveis locais) ou variáveis fora do escopo do método na classe
(variáveis instanciais). Métodos não são programas, programas tem métodos
- Não existe limites de quantidade de métodos dentro de uma
classe.
- Construtor é um método.
Classe
- Classe seria uma planta.
- Classe está para planta assim como objeto está para coisa
construída.
- Pode existir classes sem atributos e métodos.
- Classes tem modificadores de acesso.
- Só consigo me comunicar com o objeto pelo o que ele deixa
público, ou seja, pelo que consigo ver nele. Temos public, private, protected.
Por padrão o objeto da classe está como protected assim para torná-lo
público é preciso modificar o modificador de acesso para public.
- Protected: Só a classe e a as classes filhas podem
enxergar.
- Quando gera uma classe o tipo é ela mesma.
- Escopo: área na classe onde ela é válida. É representada
por {}, tudo dentro que estiver dentro das chaves faz parte da classe.
Construtores - Construtores : a partir da classe geram instâncias
especifica.
- São chamados pela
palavra new:
Pessoa p1 = new Pessoa (); //Construtor
- Admitem passagem de parâmetros.
Propriedades
- Propriedades: se ligam aos campos para poder protegê-los
- Verifica valores válidos;
- Porteiro para os campo, faz seleção do que entra;
- Representa um campo;
- Controla acesso ao campo;
- GET LER : recebendo e retornando valor ;
- SET ESCREVER : dando um valor.
Ex.: p1.Nome = “Augusto”;
- GET/SET : ler e escreve
- Modelo:
public string Nome
{
get
{} // Só get - ready only
set{}
// Só set - write only
}
- Propriedades só existem dentro da classe
Herança
- Herança: reaproveitamento do código, cria estrutura
hierárquica.
- Eliminação da repetição de código, reuso de código.
- Código mas fácil de entender
- Classe pai: generalização de todas os filhos.
- Classe filho: especialização da classe pai.
- Não é permitido
herança múltipla, não pode herdar de mamífero e ave, por exemplo.
- Quanto mais heranças mais complexo de gerenciar o código.
- Manutenção = modificando o pai todos os filhos serão modificados
automaticamente.
- As classes filhas aproveitam os construtores da classe
pai.
- O pai não é do tipo filho mas o filho é do tipo pai, avó,
bisavó...
- A classe filha só não herda os construtores da classe pai.
- Herança:
Class ContaCorrente : Conta
Polimorfismo
- Polimorfismo: algo que adquiri várias formas. Objetos que
podem tomar diversas formas. O mesmo conceito na classe pai toma
diferentes formas na classe filha, redefine conceitos na classe filha.
- Polimorfismo: reimplementarão de conceitos.
Encapsulamento
- Capacidade de representar algo a partir de alguma coisa
- Encapsulamento : coloca um tipo dentro de outro
Classe abstrata
- Abstrato: não é possível instanciar diretamente, , feito
para ser herdado, matriz de conceitos, responsabilidade do filho
instanciar. Ou implementa os métodos herdados ou continua abstrata.
- Classe abstrata: Sempre vai ser classe pai, nunca vai
gerar uma instancia.
- Palavra chave :
abstract.
- Tem que ter pelo menos um membro abstrato.
- Se um método é abstrato ele não tem implementação então
não terá {} apenas ;
- Ex.: public abstract void EmitirSon ();
abstract class Animal
Dog : Animal
Cat : Animal
Animal a = new
Animal(); //Está errado pois Animal é uma classe abstrata, não pode instanciar
Animal a = new
Cat; // Faz uma chamada ao construtor da
classe filha.
- Construtores em classes
abstratas são usados para que classes filhas reutilize.
- Na classe abstrata pode haver construtores que serão
instancias na classe filha. Ou seja, posso ter construtores mas não
instancias.
- Quando colocamos um construtos numa classe abstrata a
classe filha é obrigada a instanciar o que está na classe abstrata.
- Classe se torna abstrata se algum membro for abstrato.
- Implementa um método abstrato: override.
- Toda classe abstrata é virtual porque pode ser
sobrescrita, mas nem toda virtual é abstrata
O que é . NET?
É uma plataforma, um conjunto rico de bibliotecas com os mais variados usos. É
uma plataforma única para desenvolvimento e execução de sistemas e aplicações.
Todo e qualquer código gerado em .NET, pode ser executado em qualquer
dispositivo ou plataforma que possua .NET Framework.
Vantagens do .NET
- Conjunto rico de bibliotecas com os mais
variados usos;
- Controle de versão: fim do “DLL Hell”;
- Facilidade de desenvolvimento de aplicações ;
- Facilidade na instalação e na distribuição de
aplicações;
- Orientada a objeto;
- Alta escalabilidade para ambientes de missão
crítica;
- Interoperabilidade entre plataformas e
componentes desenvolvidos em outras linguagens .NET;
- Tecnologia baseada em máquina virtual;
- Rotina automática de “coleta de lixo” que
permite remoção de variáveis e objetos que não são mais utilizados;
- Novo ambiente de desenvolvimento acelerado
(RAD);
Desvantagens do .NET
- É um novo paradigma, e
requer aprendizado de novas
técnicas;
- Requer a distribuição do Framework;
- Em alguns casos de
migração, requer reengenharia ou reescrita completa do código. Por
exemplo, a implementação de estrutural para OO é um pouco mais complicada;
Máquina
Virtual
- Máquina
virtual: o código gerado é compilado em linguagem intermediária (IL);
- O IL
é distribuído para os clientes;
- O
compilador “just in time” (JIT) compila o código em IL para linguagem de
máquina.
- Programas
são duplo-compilados, ou seja são compilados duas vezes, uma na distribuição e
outra na execução.
- Um programa é escrito em qualquer das
linguagens de programação disponível para a plataforma, o código fonte gerado
pelo programador é então compilado pela linguagem escolhida gerando o código
intermediário em uma linguagem
- Este novo código fonte gera
um arquivo chamado de Assembly, de acordo com o tipo de projeto:
EXE - Arquivos Executáveis,
Programas
DLL - Biblioteca de Funções
ASPX - Página Web
ASMX - Web Service
- No momento da execução do programa ele é
novamente compilado, desta vez pelo JIT (Just In Time Compiler), de acordo
com a utilização do programa, por exemplo:
Temos um Web Site desenvolvido em ASP.NET, ao entrar pela primeira vez em
uma página o JIT irá compila-la, nas outras vezes que algum outro usuário
acessar esta página, ele usará esta compilação.
Múltiplas
linguagens de programação - Compilação
de uma linguagem para código intermediário;
- O
código intermediário é comum para a plataforma .NET;
- Possibilidades:
VB.NET, C#, J#, Pascal (Delphi), Perl, Python, Cobol …
Coleta
de lixo
- Mecanismo
de limpeza e desalocação de memória ;
- Limpa
as informações que não estão sendo mais chamadas;
- Destrói
e limpa automaticamente objetos que saíram de referência;
- Termina
com o problema da referência circular (Um chama outro e ninguém deste
ciclo consegue chamar);
- Termina
com problema de objetos órfãos que ocupam memória.
Orientado
a objetos
- Uso
real de herança, polimorfismo e sobrecarga;
- Fácil
extensão de funcionalidades;
Fim
da “DLL Hell”
- O problema
- Problemas
de versões de DLL: aplicações deixavam de funcionar ao atualizar versões;
- Difícil
de rastrear modificações quando é necessária a instalação de muitos
programas.
- A solução
- Versões
diferentes de um mesmo .dll podem
está numa pasta específica do Windows
- As
DLLs podem ser compartilhadas ou podem ser apenas copiadas para uma pasta;
- Versão
e assinatura: DLLs podem ter o mesmo nome,versões diferentes e rodar
lado-a-lado.
8月22日 Pessoal,
Nesta terça (21/08) voltamos com as atividades da célula. Voltamos com força total novos projetos, novas atitudes.
As reuniões serão todas as terças às 17hs no bloco A sala 106. 8月7日 A célula acadêmica é um espaço para troca de conhecimento, é
um apoio não o principal. Você faz o principal a célula te dá o suporte.
Não somos curso de C#, ASP.NET, VB.NET, XNA, WPF entre
outros, o foco da célula acadêmica é dá o complemento, um local onde você pode
tirar dúvidas, está em contato com pessoas do mesmo interesse, conhecer
programas acadêmicos, manter-se atualizado
com as novidades da Microsoft.
Na célula o caminho é aberto para o grupo decidir o que
deseja estudar, mostrando que o crescimento do grupo depende de cada
participante.
A Soft.NET busca o crescimento do grupo através de debates,
palestras, desafios com a preocupação de sempre atualizar o conhecimento de
seus integrantes.
|