| João Bosco 的个人资料João Bosco Seixas日志列表留言簿 | 帮助 |
|
|
10月22日 Fundamentos do Framework 2.0 - Tipos por ValorFundamentos do Framework Tipo por Valor
Esse é o primeiro artigo de uma serie que irá falar sobre fundamento do .NET Framework 2.0 utilizando C#. O objetivo é falar de alguns pontos importantes do framework para quem está começando com .NET 2.0 Grande parte do conteúdo foi baseado no livro Microsoft .NET FRAMEWORK 2.0 Application Development Foundation que serve de guia para prova 70-536 da Microsoft.
Vamos começar essa serie falando sobre algo muito básico. Os tipos por Valor. Tipos por valor guardam diretamente os dados, enquanto tipos por referencia são apenas apontadores para alguma área de memória.
Os tipos por valor são guardados numa área de memória chamada stack(pilha), onde o runtime pode criar, ler, atualizar e deletar rapidamente, com o mínimo de sobrecarga. Quando você copia um tipo por valor os dados da variável são copiados em outro ponto da pilha. Ficando assim armazenados em dois locais diferentes na pilha, se você altera um deles, o outro continua com o mesmo valor. A vantagem mais obvia de se usar tipos por valor é a performance. Mais tarde discutiremos os ganhos com tipos por valor.
Existem 3 categorias básicas de tipos por valor
Built-in, são tipos fornecidos pelo .NET Framework. Todos os tipos numéricos básicos inclusos no .NET Framework, são tipos por valor. Exemplos:
*Nota do Livro* Segundo os autores o runtime otimiza a performance dos inteiros de 32 bits ou seja, o int (System.Int32). Para operações de ponto flutuante o recomendado seria double(System.Double), pois suas operações são otimizadas pelo hardware.
Alguns tipos não numéricos também são tipos por valor. Exemplos: char (System.Char) bool(System.Boolean) date(System.DateTime)
Esses são os tipos mais comuns, porem existem outros tipos por valor que são fornecidos pelo framework.
Tipos por valor Built-in possuem construtores implícitos, por isso não há necessidade de se declarar com a palavra “new” como é feito com classes normais. *Lembrando que todos as classes herdam de System.Object.* Exemplos de inicialização em variáveis por valor. int x; bool k = false; double y = 10.2;
No .NET FRAMEWORK 2.0, temos um novo tipo por valor, o Nullable. Esse tipo pode assumir 3 valores (true, false, null). Pode ser aplicado em uma rotina onde os valores possíveis são true e false, mas que se deseja ter um controle sobre o campo. Exemplo, se o usuário preencheu o campo então a variável receberá true ou false de acordo com o escolhido pelo usuário, mas se o usuário não preencheu o campo, então o valor fica null. Existem também outras possibilidades para o uso do Nullable Um exemplo de declaração: Nullable<bool> b = null;
Em um futuro artigo iremos falar sobre essa sintaxe de declaração do Nullable, abordando Generics.
Temos também os tipos User-Defined que são chamados de struturas ou structs. As structs são tipos por valor, na maioria das vezes se parecem muito com uma classe, a única diferença é que ela é armazenada na pilha como se fosse um objeto referenciado por valor
Structs são agrupamentos de dados que facilitam o trabalho. Por exemplo, o System.Drawing.Point , que é um struct que contem as coordenadas X e Y de um ponto qualquer. Você poderia perfeitamente criar uma variável inteira para X e outra para Y, mas agrupa-las numa struct provê uma forma mais fácil de trabalhar com as coordenadas, dando a possibilidade de usar um construtor por exemplo.
System.Drawing.Point ponto = new System.Drawing.Point(100,200);
Como se pode observer, a forma de se trabalhar com struct é idêntica a um classe. Para declarar uma estrutura, é usada a palavra reservada struct em C#. Segue um exemplo de struct:
struct ponto{
int X, Y; //campos - atributos
//Construtor que recebe as coordenadas X e Y como parametros public ponto(int coordX, int coordY){
X = coordX; Y = coordY; }
//Propriedade que manipula a coordenada X public int CoordenadaX{ get { return X; } set { X = value; } }
//Propriedade que manipula a coordenada Y public int CoordenadaY{ get { return Y } set { Y= value; } } }
Como da para perceber, pode-se converter facilmente essa struct para uma classe, a diferença é que ela passará a ser um tipo por referencia e ocupará mais espaço na memória. Um tipo por valor, ocupa 4 bytes para cada campo inteiro. No caso dessa struct ela teria o tamanho de 8 bytes, já se fosse uma classe teria 16 bytes. Structs são normalmente mais eficientes e performáticas que classes, pois um tipo por valor tem melhor desempenho que tipos por referencia. Lembrando que quando se trabalha dessa maneira com structs, é importante sobrescrever alguns métodos como por exemplo o Equals().
Por ultimo vamos falar sobre enumerações, que também é um tipo por valor. Enums, como são comumente conhecidas, facilitam a legibilidade do código, portanto é uma boa pratica de programação empregar essa funcionalidade sempre que possível. É muito simples de implementar, vamos a um exemplo:
enum diaSemana{ domingo, segunda, terca, quarta, quinta, sexta, sabado }
O padrão do enumeration é começar a contagem do 0 e ir incrementando 1 a cada elemento. No exemplo acima temos os seguintes valores: Domingo = 0 Segunda = 1 Terca = 2 Quarta = 3 Quinta = 4 Sexta = 5 Sábado = 6
Porem podemos atribuir nosso próprios valores.
Enum mês { janeiro = 1, fevereiro, marco, maio, abril }
Nesse exemplo janeiro começa com 1 e os outros elementos são incrementados de 1. Podemos também ter o valor atribuído para todos os elementos.
Vamos ver agora 2 exemplos
int dia = diaSemana.segunda; int dia = (int) diaSemana.segunda;
O primeiro exemplo está errado em C#, pois o valor de retorno de diaSemana.segunda não é um int. Já o segundo exemplo está correto, pois faz o cast do valor de retorno para int.
As enumerações tem como padrão o tipo int, mas podem assumir outros tipos por valor como Byte, Int32 e UInt64. Podemos criar um enum do tipo long, no exemplo abaixo podemos demonstrar isso. enum maximo : long { Min = 255L }
Lembrando que sempre será necessário o cast, caso deseje armazenar o valor do campo do enum numa variável, como demonstrado mais acima.
Lembrando que enum difere completamente de struct e obviamente de classes. Uma enumeração não pode definir métodos, não pode implementar interfaces e não define propriedades.
Em breve entraremos em outro tema, dando continuidade aos Fundamentos do Framework 2.0 Espero que tenham gostado. Foi minha primeira experiência com blogs e construção de materiais. Espero que ajude alguem que está começando.
Abraços, João Bosco. 10月19日 Aprendendo Java com o BopeSou .NET mas essa eu não podia deixar passar!
Muito engraçado!!!
Creditos para: http://jf.eti.br/aprendendo-java-com-o-bope/
/**
* O Bope foi criado para atuar quando a policia perde o controle * E no rio de janeiro isso acontece com bastante frequencia */ class Bope{ private String nome; private int qtdeVitimas = 1; // ja começa bem! public Bope(String nome){ this.nome = nome; } // sobrecarga do método ondeTaOBaiano public void ondeTaOBaiano(Estudante e){ e.sabeVoarEstudante(); } public void ondeTaOBaiano(Traficante t){ t.levaSacoNaCabeca(); } // exemplo de método final! public final Doze encontreiOBaiano(Baiano b){ return b.naCaraNaoQueEhPraNaoEstragarVelorio(); } } public class Treinamento{ public void missao(CapitaoNascimento cn){ cn.sentaOdedoNessaPorra(); } // Sugestão do leitor Luciano Silva public static void main(String [] xxx){ //Apresento o capitão nascimento Bope capitao = new Bope(”01″); //Capitao Nascimento try{ //de cada 100 policiais que fazem o curso do Bope, //so se formam 5, e eu, quando me formei parceiro, //eramos apenas 3. Turma.tentaFazerCursoBopeCom(capitao); while(aluno.count >= 3){ aluno.pedePraSair(); if(aluno istanceof Cafetao){ capitao.say(”Pede pra sair!”); capitao.say(”Seu Lugar Eh Com Puta!”); } if(aluno istanceof PorraLoka){ capitao.say(”Tira essa farda preta!”); capitao.say(”Voce nao eh cavera. voce eh MULEQUE!”); } if( aluno.isXerife() ) aluno.desiste(); } } catch (PolicialCorruptoEncontrado pce){ } catch (PolicialFracoEncontrado pfe){ } catch (PolicialSemABandoleiraNessaAlturadoCampeonato e) { } } }
SEUS FANFARRÕES! VCS TEM 10 SEGUNDOS PARA COMPLETAR ESSE CÓDIGO! - O zero-dois NÃO está escrevendo! - SEU zero-dois, porque o senhor não escreveu nenhuma linha? - A-a minha IDE não terminou de carregar, senhor… - Agora a sua IDE ja carregou, seu zero-dois? - S-sim senhor… - Então, seu zero-dois, termine o seu programa, senão todos os seus colegas terão que usar o EDIT do MS-DOS até o fim do curso E A CULPA EH DO ZERO-DOIS! HOMEM DE PRETO QUAL É A SUA MISSÃO? É APRENDER JAVA SEM PRECISAR DE CERTIFICAÇÃO! HOMEM DE PRETO O QUE É QUE VC FAZ? FAÇO CODIGO FONTE QUE ASSUSTA O SATANÁS! Estratégia, do inglês, Strategy… - Senhor, o zero-cinco está dormindo…
Muito boa essa!!! uhahuahauhauhauha 10月5日 Imagine Cup 2008O que é imagine cup? Imagine Cup é a competição mundial, promovida pela Microsoft que visa incentivar estudantes de tecnologia a aplicarem sua imaginação, criatividade e espírito inovador, em soluções que irão fazer a diferença no mundo. Nos últimos anos a Imagine Cup cresceu e se tornou realmente uma competição global que procura soluções para desafios do mundo real.
Tema de 2008 O tema da competição em 2008 é o meio ambiente. Nosso planeta está sofrendo mudanças de todas as ordens diariamente. Devemos nos apressar então em desenvolver soluções para que tenhamos um equilíbrio e um meio ambiente sustentável. Diariamente geleiras glaciais derretem, florestas são derrubadas, novos desertos se formam. Tudo isso sinaliza que devemos ter pressa na mudança do nosso estilo de vida e concepção de mundo. Este ano a Microsoft está chamando os jovens estudantes para participarem da competição, com o intuito de desenvolver soluções que ajudem a prover um meio ambiente sustentável. O slogan da competição esse ano é: “Imagine um mundo onde a tecnologia permita um meio ambiente sustentável.” Segundo a Microsoft, o resultado da união do poder da tecnologia e o potencial de pessoas jovens, é ilimitado. As idéias que surgirão desse casamento, poderão ajudar milhões de pessoas no futuro. Tudo isso ainda gira em torno de uma premiação em dinheiro para os 3 melhores colocados em cada categoria.
Categorias Este ano temos 9 categorias:
Nessa categoria o objetivo é desenvolver um software que tenha ligação com o tema, usando os requisitos mínimos que são: Implementar e consumir um web service, usar o Microsoft .NET Framework 2.0 ou superior e usar o Visual Studio para desenvolver o projeto. Essa categoria é em equipe e pode ser composta de 4 pessoas e mais um mentor, que pode ser um professor da faculdade. A premiação para o primeiro colocado é de 15 mil dólares.
Times de 2 a 4 participantes com direito a um mentor, vão construir protótipos de dispositivos. Premiação é de 15, 10 e 5 mil dólares para o primeiro segundo e terceiro colocados.
O objetivo dessa categoria é desenvolver um game 2D ou 3D, utilizando a plataforma XNA, com linguagem de programação C#. Esses jogos devem ser executados tanto em pc quanto em Xbox 360. O premio para a equipe que ficar em primeiro é de 25 mil dólares.
O projeto Hoshimi é basicamente um jogo onde você controla um exercito de nano-robôs que tem que percorrer o corpo humano para cura-lo. O premio para o campeão dessa categoria é 8 mil dólares.
Nessa categoria você terá que prover uma infra-estrutura segura e robusta com base em um problema. Durante a competição é indicado o material que pode servir como base de conhecimento para resolver os problemas propostos. A premiação para o campeão é de 8 mil dólares.
Nessa categoria você terá que desenvolver complexos algoritimos para resolver questões propostas. A primeira fase é baseada num pequeno robô que tem que percorrer a arena passando por certos pontos. O objetivo é programar esse robô para cumprir essa tarefa gastando o mínimo de bytes. A segunda fase é baseada na solução de problemas utilizando C# ou VB . NET. O premio para o vencedor é de 8 mil dólares.
O concurso de fotografia visa sensibilizar o publico ao tema proposto na competição. O objetivo é tirar uma serie de fotos de forma que elas contem uma historia que sensibilize as pessoas para a causa em questão. Essa categoria é disputada em dupla e tem premiação de 8 mil dólares para o vencedor.
Tem o mesmo objetivo da categoria de fotografia, porem aqui será um filme com menos de 25MB de tamanho e menos de 500 palavras em inglês. Nessa categoria os times são formados por 4 membros.
Criatividade, idéias inovadoras e usabilidade, esses são os pilares dessa categoria. Em duplas com direito a um mentor, sua equipe deve criar uma interface de interação inovadora com o usuário para um aplicação. A premiação para o campeão é de 8 mil dólares.
Essa é uma competição muito importante, que infelizmente ainda tem pouca tradição no Brasil e principalmente na Bahia, mas vamos tentar reverter esse quadro. Apesar do Brasil já ter ficado entre os 3 melhores por mais de um ano ainda são poucos os trabalhos submetidos levando em conta a quantidade de estudantes de tecnologia que temos no pais. A competição é uma grande oportunidade de ganhar projeção, sem falar na chance de ganhar dinheiro realmente. Para participar é só se registrar em: http://www.imaginecup.com Se você decidir competir, nós iremos nos encontrar.... 10月3日 Apresentação - Seadragon - PhotosynthEsse será apenas um quick post onde irei me apresentar e falar rapidamente de duas "novas" tecnologias, muito interessantes. Meu nome é João Bosco, sou estudante de Sistemas de Informação na Faculdade Jorge Amado em Salvador - Bahia. Para começar vou falar do SeaDragon, uma tecnologia excepcional para visualização de imagens.
Outro projeto muito interessante que usa o SeaDragon para agregar valor é o PhotoSynth. Segue o link para um demo do projeto: http://labs.live.com/photosynth/videodemo.html Os dois projetos fazem parte do Microsoft Live Labs. Mais informações sobre esses e outros projetos podem ser encontrados na pagina: http://labs.live.com/ E para finalizar, um vídeo demonstrativo abordando tanto o Seadragon quanto o Photosynth.
|
|
|