Características funcionais de C# 3.0

Slides:



Advertisements
Apresentações semelhantes
Paulo Marques Hernâni Pedroso
Advertisements

Banco de Dados Prof. Antonio.
SQL Structured Query Language (continuação)
Prof.: Bruno Rafael de Oliveira Rodrigues
Programa de Pós-Graduação Lato Sensu MBA em Gestão de Software
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Operadores Especiais da SQL
Linguagens de programação
AULA – Linguagem C – Vetores, Ponteiros Estruturas
Alexandre Parra Site: Linguagem Java Alexandre Parra Site:
Material III-Bimestre Wagner Santos C. de Jesus
Análise Léxica Supondo o trecho de programa abaixo:
Construção de Compiladores
00(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
EL e JSTL Prof. Danton Cavalcanti Franco Junior
Introdução ao C# e ao visual studio
Análise Semântica e Representação Intermédia
ES – 2º Apresentação Teórica. Rename Method O nome de um método não revela o seu propósito.Motivação Métodos devem ser chamados de uma forma que comuniquem.
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
I- Introdução A Evolução dos Modelos de Dados e dos Sistemas de Gerência de Banco de Dados.
Linguagem de Programação C#
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática - análise contextual
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Conceitos básicos de orientação a objetos
Curso básico de PHP 1 Vantagens: Gratuito Multiplataforma Estável Rapidez Comunicação.
Tópicos avançados em internet A
Programação I Aula 2 (Métodos)
Oberdan Bitencourt Ferreira
Leandro Martinez Evolução do C# Leandro Martinez
Linguagem de Programação JAVA
Introdução à Programação Orientada a Objetos com Java
Estudo dos Conceitos e Paradigmas de Programação
Tipos Abstratos de Dados
Paradigmas de Linguagens de Programação Linguagem Imperativa 2
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Paradigmas de Linguagens de Programação Linguagem Orientada a Objetos 1 Augusto Sampaio e Paulo Borba Departamento de Informática Universidade Federal.
Treinamento sobre SQL.
Conceitos Programas Programação Linguagens de Programação SQL.
Paradigmas de Linguagens de Programação Aula 2
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
Ruby (2/2) André Braga Patrícia Lustosa. Intro Peguem a aula de ontem em /~plvr para ter como referência para os exercícios de hoje.
Algumas notas sobre a linguagem de programação C
RMI - JAVA.
Treinamento SQL Server
Uma perspectiva conceitual sobre a comparação de LPOO´s Bent Bruun Kristenser Kasper Osterbte By Lineu Antonio de Lima Santos.
Recursividade Profs. De Prog2 e Lab2.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP.NET Framework.NET com C#. Orientação a Objeto parte II.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Equipe de monitoria Aula prática 4.  Tipos  Tabela de Objetos  Herança  Métodos  Referências  Coleções  Composição de coleções  Conectividade.
Bruno Inojosa MCP .NET Framework
LINQ e Entity Framework
JR: Flexible Distributed Programming in an Extended Java Elmário Gomes Dutra Jr. Gustavo Romano.
Sintaxe de uma Linguagem
Shell Script Parte 2.
Módulo II Capítulo 1: Orientação a Objetos
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
Array e ArrayList LPOO – 01/09/14.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
MATA56 Tipos, Verificação de Tipos Agenda Objetivo desta aula: Introduzir os principais aspectos semânticos de variáveis Palavras-chave – nomes.
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
Java Como Programar, 8/E Deitel/Deitel, 8e. Java – Como programar Copyright © 2010 Pearson Education Slide 1.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Transcrição da apresentação:

Características funcionais de C# 3.0 Seminário Programação Funcional

Equipe Felipe Cavalcanti – fcf3 Fernando Kakimoto – fvk Filipe César – fcsa Francisco Magalhães – fpms

Motivação Coesão Uso de expressões lambda Construção de APIs de mesmo poder expressivo das linguagens de consulta – LINQ Project Bancos de dados relacionais XML Coesão Redução de linhas de código Uso de expressões lambda Maior entendimento do código (Readability) Query expressions: which provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery. Lambda expressions: an evolution of anonymous methods that provides improved type inference and conversions to both delegate types and expression trees.

Motivação Uso de extensão de métodos Composability Trabalhar com coleções de uma variedade de tipos Uso de Generics Composability Escrever código livre de efeitos colaterais Extension methods: which make it possible to extend existing types and constructed types with additional methods. Composability: is one of the key concepts of functional transformations.  If you write code that does not exhibit side effects, you gain composability.  This means that anywhere in a pure functional transformation, you can refactor by writing a pure method, and calling it with impunity, knowing that your transformation will continue to operate properly.

Roteiro Breve Histórico de C# Características funcionais de C# 3.0 Exemplos Conclusão

Breve Histórico de C# Criada pela Microsoft como parte da iniciativa .NET Anunciada em Julho de 2000 após aprovação ECMA-334 Características iniciais Linguagem orientada a objetos Tipagem forte Portabilidade de código Gerenciador de memória automático Suporte a internacionalização C# 1.0: First-class functions (delegates), created only from named methods. Environment=object, code=method. C# 2.0: Parameterized types and polymorphic methods (generics) Anonymous methods: creation of delegate objects from code bodies, closure-converted by C# compiler Iterators: stream abstraction, like generators from Clu C# 3.0: Lambda expressions: lightweight syntax for anonymous methods whose bodies are expressions Type inference for locals and lambdas (Also, not discussed: expression trees for lambdas)

Breve Histórico de C# C# 2.0 Divulgada juntamente com o release do Visual Studio 2005 Introduziu extensões à linguagem Generics Anonymous method Iterators Partial types Generics: permit classes, structs, interfaces, delegates, and methods to be parameterized by the types of data they store and manipulate. Generics are useful because they pro- vide stronger compile-time type checking, require fewer explicit conversions between data types, and reduce the need for boxing operations and runtime type checks. Anonymous methods: allow code blocks to be written ìin-lineî where delegate values are expected. Anonymous methods are similar to lambda functions in the Lisp pro- gramming language. C# 2.0 supports the creation of ìclosuresî where anonymous methods access surrounding local variables and parameters. Iterators: are methods that incrementally compute and yield a sequence of values. Itera- tors make it easy for a type to specify how the foreach statement will iterate over its elements. Partial types: allow classes, structs, and interfaces to be broken into multiple pieces stored in different source ?les for easier development and maintenance. Additionally, partial types allow separation of machine-generated and user-written parts of types so that it is easier to augment code generated by a tool.

Breve Histórico de C# C# 3.0 Corresponde à versão atual Lançada em 19 de Novembro de 2007 Parte do .NET Framework 3.5 Novas características Linguagens funcionais LINQ

Características Funcionais de C# 3.0 Implicitly typed local variables Extension methods Tuples Object and collection initializers Anonymous types Query expressions Implicitly typed arrays Lambda expressions Expressions trees

Implicitly typed local variables Utilizando-se a palavra-chave var, força o compilador a inferir o tipo da variável ou array de elementos da expressão do lado direito da sentença. É obrigatório a inicialização da variável var na declaração A inicialização precisa ter um tipo definido em tempo de compilação, aonde não pode ser null. A inicialização não pode referenciar a declaração da variável.

Implicitly typed local variables A declaração da variável local com tipo implícito é equivalente a declaração com tipo explicito mostrada a baixo:

Implicitly typed local variables Exemplos de declarações de variáveis locais utilizando o var incorretamente:

Implicitly typed local variables Declaração de variável local: var i = 5; Inicialização do for: for(var x = 1; x < 10; x++) Inicialização de um foreach foreach(var item in list){...} Expressão using using (var file = new StreamReader("C:\\teste.txt")) {...}

Extension methods Extension Methods nos permite adicionar novos métodos em tipos já existentes sem que seja necessário realizar herança ou mesmo recompilar o tipo original Métodos estáticos que podem ser chamados usando a síntaxe de métodos de instância. O compilador fica responsável por procurar e invocar o método estendido -> the compiler will find and bind to the extension method Vocês queriam dizer aqui a utilização de delegate??? Função de primeira-ordem??? Alguem pode me dizer pra eu nao colocar besteira.. Quem escreveu isso aqui?

Extension methods Aplica-se para Passos Classes, classes abstratas e interfaces Tipos parametrizados e não-parametrizados Passos Definir uma classe estática Definir um método estático cujo primeiro argumento seja do tipo para o qual se deseja estender Usar a palavra chave this no primeiro argumento

Extension methods Exemplo:

Extension methods É muito utilizado em query operators que adicionam novas funcionalidades para tipos já existentes como IEnumerable.

Tuples Um dos tipos muito utilizados na programação funcional. Listas de valores fortemente tipadas, tal como o conjunto de argumentos para um método.

Tuples Exemplo:

Object and collection initializers Criam objetos e coleções em contextos de expressões ao invés de declarações Inicialização in-line de objetos Mais conveniente de implementar Mais fácil de ler

Object and collection initializers Exemplo Declarativo Expressão

Object and collection initializers Passar como argumento de funções Objetos dentro de objetos

Object and collection initializers Inicializador com construtores

Object and collection initializers Inicializadores de coleções Consiste numa sequência de inicializadores, limitados por chaves e separados por vírgulas

Até agora Implicitly typed local variables Extension methods Tuples Realiza inferência do tipo de variável Extension methods Estender tipos através de classes estáticas Tuples Listas de valores fortemente tipadas Object and collection initializers Inicialização in-line de objetos e coleções

Mais pra frente Anonymous types Query expressions Implicitly typed arrays Lambda expressions Expressions trees

Anonymous types Define, declara e instancia um tipo e um objeto em um único passo (classe sem nome) Utiliza a idéia de tuplas – conjunto de pares nome/valor Limitado ao scopo local Exemplo O compilador cria a classe automaticamente e infere os seus tipos

Anonymous types Utilizado em projeções Criar um subconjunto de valores You often have one set of data and want to create another set of data from it.  You may want to see a subset of the fields.  The data may be filtered so that there is less of it.  The data may be combined with other data to create an entirely new shape of data.  This is called projection.

Query expressions Provê uma sintaxe integrada para consultas semelhante à linguagens relacionais e hierárquicas como SQL e XQuery. Iniciam com a cláusula from e terminam com a cláusula select ou group. A cláusula from inicial pode ter em seguida zero ou mais from, let, where ou join.

Query expressions Cada let computa um valor e o coloca em um identificador. Cada where é um filtro que exclui itens do resultado Joins comparam as chaves especificadas das duas sequências, retornando os valores iguais.

Query expressions Orderby ordena o resultado de acordo com o critério desejado O último select ou group especificam o formato do resultado. Cláusula Into permite a junção de consultas tratando o resultado de uma consulta como um gerador de uma subsequente.

Query expressions Ambiguidades evitadas com expressões sendo identificadas por from e qualquer token válido, exceto ";", "=" or ",". Para utilizar qualquer uma das palavras-chaves, deve colocar o @ na frente.

Query expressions Exemplo Practical Application: "var q" <-- Anonymous Type (+). An anonymous type that holds an Anonymous Type with one property "staff.Name". Also, "var" lets you create an Implicitly typed local variable (+) . This means,    a) You didn't have to declare/write a class structure to hold a type with one property called "Name" of data type string.    b) You don't have to maintain that either - you can change the structure of the above query, and "it just works" :)

Query expressions Exemplo

Implicitly typed arrays Declarar arrays de tipos implícitos O tipo é inferido de acordo com seus elementos Todos os elementos devem ter um único tipo inferido Caso contrário, erro de complilação Exemplo

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura de dado de tipo anônimo

Lambda expressions Expressam a implementação de um método ou a instanciação de um delegate a partir de uma construção sintática simples Usada em delegações e em árvores de expressões Exemplo

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Expression trees Permitem que expressões lamda sejam representadas como estruturas de dados ao invés de código executável. Eficientes em termos de memória Explicita e deixam transparentes a estrutura das expressões lambda xpression trees are efficient in-memory data representations of lambda expressions and make the structure of the expression transparent and explicit.

Expression trees Exemplo

Implicitly typed arrays Declarar arrays de tipos implícitos O tipo é inferido de acordo com seus elementos Todos os elementos devem ter um único tipo inferido Caso contrário, erro de complilação Exemplo

Implicitly typed arrays Pode ser combinados com inicializadores de objetos anônimos Cria uma estrutura de dado de tipo anônimo

Lambda expressions Expressam a implementação de um método ou a instanciação de um delegate a partir de uma construção sintática simples Usada em delegações e em árvores de expressões Exemplo

Lambda expressions Statement lambda expressions Expressões mais complicadas Uso de chaves

Expression trees Permitem que expressões lambda sejam representadas como estruturas de dados ao invés de código executável. Eficientes em termos de memória Explicita e deixam transparentes a estrutura das expressões lambda xpression trees are efficient in-memory data representations of lambda expressions and make the structure of the expression transparent and explicit.

Expression trees Exemplo

Expression trees Exemplo[1]

Conclusão C# 3.0 e LINQ adotam muitos termos e mecanismos das linguagens de programação funcional Alto poder de coesão através das características apresentadas Diminui linhas de código Facilita a leitura Ajuda na manutenção e extensão Apesar das várias características funcionais, C# é limitada, não se tornando verdadeiramente multiparadigma

Referências [1] “C# programming guide”, disponível em: http://msdn.microsoft.com/en-us/library/67ef8sbd.aspx [2] Andrew Kennedy, “C# is a functional programming language”, Microsoft Research Cambridge [3] “Is C# becoming a functional language?”, disponível em: http://blogs.msdn.com/madst/archive/2007/01/23/is-c-becoming-a- functional-language.aspx [4] Eric White, “Query Composition using Functional Programming Techniques in C# 3.0”, disponível em: http://blogs.msdn.com/ericwhite/pages/FP-Tutorial.aspx [5] “Recommended blog for C# 3.0 and functional programming”, disponível em: http://blog.falafel.com/2007/09/04/RecommendedBlogForC30AndFunctional Programming.aspx

Características funcionais de C# 3.0 Seminário Programação Funcional