Ana Carolina 的个人资料Ana Carolina Lima照片日志列表更多 工具 帮助
8月29日

Plataforma .NET – Funcionamento e Arquitetura


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日

Um pouco sobre Orientação a Objeto


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

Um pouco sobre .NET


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日

Voltamos

 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日

Um pouco sobre célula acadêmica

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.