A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ricardo Felipe Leandro Saori Jennifer Language.

Apresentações semelhantes


Apresentação em tema: "Ricardo Felipe Leandro Saori Jennifer Language."— Transcrição da apresentação:

1 Ricardo Felipe Leandro Saori Jennifer Language

2 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

3 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

4 Introdução Neste seminário, mostraremos a Linguagem GO abordando seus principais aspectos e caracteristicas que julgamos importante para seu diferencial em relação as linguagens até então conhecidas. Para o melhor entedimento usaremos comparações com as linguagens C e Java.

5 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

6 Como chegamos aqui Segundo Rob Pike: 1)C e Unix tornaram-se dominante nas pesquisas; 2)O desejo por uma linguagem de alto-nível levou a C++, apesar de ter sido um ajuste pobre, possibilitou uma programação de alto nível para Unix; 3)C++ se tornou a principal escolha na indústria e nas pesquisas universitarias; 4)Java surgiu como uma visão mais limpa de C++, 5)Pelo final dos anos 90, Java foi escolhida como linguagem para ensino.

7 Programação se tornou díficil Essas linguagens são difíceis de usar Elas são sutis, complexas e detalhadas. Seu modelo padrão está “sobrevendido” e nós respondemos com add-on como “padrões” (Norvig: os padrões são uma demonstração de fraqueza em uma linguagem.) No entanto, essas linguagens são bem sucedidas e vitais.

8 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

9 Reação A falta de jeito das principais linguagens causou uma reação: uma série de sucessos de linguagens mais simples (Python, Ruby, Lua, Java Script, Erlang…). Isso demonstra a insatisfação com o modelo padrão e a abordagem, cada vez mais popular, do novo modelo.

10 As vantagens As linguagens padrões são muito fortes: type-safe, eficazes e eficientes Nas mãos de especialistas, elas são ótimas Grandes sistemas e grandes empresas são construídas em cima delas Na prática, elas funcionam bem para programação em grande escala: programas de grande porte e número alto de programadores.

11 As desvantagens As linguagens padrões são difíceis de usar Compiladores são lentos e exigentes. Binários são enormes. Muitos programadores preferem evitá-las. As linguagens tem, pelo menos, 10 anos de idade e são mal adaptadas para os ambientes atuais ( multicores, nuvens de rede).

12 Qual seria o ideal ? Manter as vantagens e evitar as desvantagens ( ÓBVIO!!!!) : -A sensação de uma linguagem dinâmica com a segurança de um sistema estático; -Compilação rápida; -Tempo de execução real que suporta GC; -Leve, sistema flexível; -Possui métodos, mas não é uma linguagem OO convencional.

13 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

14 Hello World! Em C: #include int main(){ printf("Hello World!"); return 0; }

15 Hello World! Em Java: public class Main { public static void main(String[] args) { System.out.print("Hello World!"); }

16 Hello World! Em Ruby: puts “Hello World!”

17 Hello World! Em Go: import "fmt" func main() { fmt.Print("Hello World!") }

18 Γειά σου Κόσμε !" Em Go: import "fmt" func main() { fmt.Print(" Γειά σου Κόσμε !") }

19 こんにちは、世界! Em Go: import "fmt" func main() { fmt.Print(" こんにちは、世界! ") }

20 Básico da Linguagem É baseada em C com participação da família Pascal / Modula / Oberon (declarações, pacotes), além de algumas idéias de linguagens inspiradas por Tony Hoare (simultaneidade)

21 Váriaveis Declarações: muito parecidas com C, mas de forma invertida, várias formas de declaração para se adequar ao uso da váriavel em questão // Forma completa var variável_A1 int = 10 var variável_A2 string = "dez“ // Forma menos abreviada var variável_B1 = 20 var variável_B2 = "vinte“ // Forma mais abreviada (variáveis locais apenas) variável_C1 := 30 variável_C2 := "trinta“ variável_C3 := uint64(10) //Atribuição múltipla x, y, z := 10, 10.0, "dez"

22 Váriaveis Tipos numéricos: uso de palavras intuitivas, sem conversões implicitas ( int != int32)

23 Váriaveis Booleanos: o tipo bool pode assumir os valores true ou false, o operador if usa apenas expressões booleanas, ponteiros e inteiros não são booleanos. Go: var a bool = 2<3 var b bool = false

24 Estruturas de controle If: if x > 0 { // código } For: Go a implementa for de forma mais genérica e flexível que o usual. // Como o for do C for inicial; condição; final { /* código */ } // Como o while do C for condição { /* código */ } // Loop, como o for(;;) do C for { /* código */ } // Percorrer uma lista for c, v := range lista { // c = chave (key), v = valor }

25 Estruturas de controle Switch: É geralmente usado para testagens massivas sobre um mesmo objeto/valor, porém Go permite o uso mais amplo também nesse caso. Algo a ser testado pode tanto ser um valor simples quanto um objeto complexo e para cada case pode-se fazer mais de um teste. switch algo { default: /* código */ case "A", "B", "C": /* código */ case "1", "2", "3": /* código */ }

26 Funções Podem retornar valores de diferentes tipos. func MySqrt(f float64) (float64, bool) { if f >= 0 { return math.Sqrt(f), true } return 0, false }

27 Funções Um simples return retorna os valores default das váriaveis de retorno func MySqrt(f float64) (v float64, ok bool) { if f >= 0 { v,ok = math.Sqrt(f), true } return // return 0, false }

28 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

29 Orientação a objetos Resumo: OO é um tipo especial de "empacotamento" de código no qual um contexto é logicamente isolado do restante e tratado em termos de input e output. import "fmt" type MinhaEstrutura struct { nome string número int } func (minha *MinhaEstrutura) ImprimaNomeENúmero() { fmt.Printf("Nome:\t%s\nNúmero:\t%d\n", minha.nome, minha.número) } func main() { m := new(MinhaEstrutura) m.nome = "Fulano" m.número = 10 m.ImprimaNomeENúmero()}

30 Orientação a objetos Classe: representa um conjunto de objetos com características afins. (mais especialmente uma interface)

31 Orientação a objetos Go não é realmente orientado a objetos Não tem herança Logo não tem polimorfismo Apenas utiliza alguns conceitos Interface

32 Orientação a objetos (Java) public class C1 /*extendsObject*/{ //lista de atributos //construtor //metodos //classes internas }

33 Orientação a objetos Em java um método geralmente altera os atributos da própria classe. E se tivermos a necessidade de utilizar um tipo especial de dados mas a linguagem não oferecer suporte?

34 Orientação a objetos Em C quando queremos definir um tipo diferente de dados utilizamos o typedef typedef struct A {... } A; main(){... A *a = (A*)malloc(sizeof(A));...}

35 Orientação a objetos (C) E para manipularmos este novo tipo? void add(A* a, int i){... //aqui dentro manipulamos “a”.. }

36 Orientação a objetos (C) O que você mais odeia em C quando esta lidando com tipos novos de dados?

37 Orientação a objetos (C) O que você mais odeia em C quando esta lidando com tipos novos de dados? Passar a variável a ser manipulada como parâmetro?

38 Orientação a objetos Orientação a objetos resolveria isso! a.add(i); Simples assim!

39 “Orientação a objetos” (Go) Em go não existe classe! Mas existe interface... type A interface { add(i int)...}

40 “Orientação a objetos” (Go) Mas em quem a função add(int) vai agir?

41 “Orientação a objetos” (Go) Interfaces não contém o código propriamente dito, são apenas “assinaturas”. Go permite ao programador especificar em quem um método ira agir sem a passagem de parâmetro.

42 “Orientação a objetos” (Go) func (a *A) add(i int){ a.valor = i } Deste modo a função add funciona apenas ao tipo de estrutura “A”, como se fosse uma orientação a objetos sem todos aqueles conceitos(chatos).

43 Orientação a objetos // retorna um ponteiro para uma nova variável

44 as funões add(int) e max() são aplicáveis apenas ao tipo *arv

45 E onde entra a interface na história?

46 Nossa estrutura criada obedece estas três interfaces pois existem os métodos add(int) e max() que são aplicáveis a ela.

47 Repare que a função não recebeu nossa estrutura criada, mas sim a interface... Esta função sabe trabalhar com quaisquer tipos de dados que satisfaçam a interface “arvore”

48

49 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

50 Quick Sort (Java) public static void quick_sort(int []v,int ini, int fim){ int meio; if(ini

51 Quick Sort (Java) public static int partition(int []v, int ini, int fim){ int pivo, topo,i; pivo = v[ini]; topo = ini; for(i=ini+1;i

52 Quick Sort (Java + Go) func quick_sort(v []int,ini, fim int){ var meio int if ini

53 Quick Sort (Java + Go) func partition(v []int,ini, fim int) int{ var pivo, topo, i int pivo = v[ini] topo = ini for i=ini+1; i

54 Quick Sort (Go) func quick_sort(v [] int){ var meio int if 0

55 Quick Sort (Go) func partition(v []int) int{ var pivo, topo, i int pivo = v[0] topo = 0 for i=1; i< len(v); i++ { if(v[i]

56 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

57 Conclusão -Linguagem muito imatura; -É baseada na arquitetura atual (Von Neumann) o que a torna mais próxima do paradgima imperativo; -Pouco mais produtiva que C; -Tenta dar uma falsa impressão de flexibilidade.

58 Índice -Introdução -História -Observações iniciais -Moderno x Antigo -GO -Básico -Orientação a objetos -Algoritmo Exemplo -Conclusão -Refêrencia

59 Referência -https:// sites.google.com/a/danielmazza.info/tut orial/go -http://golang.org/doc/effective_go.htmlhttp://golang.org/doc/effective_go.html -“ pike-stanford” -Go Course Day (1, 2 e 3)


Carregar ppt "Ricardo Felipe Leandro Saori Jennifer Language."

Apresentações semelhantes


Anúncios Google