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

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

Ricardo Saori Leandro Felipe Jennifer

Apresentações semelhantes


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

1 Ricardo Saori Leandro Felipe Jennifer
Language Ricardo Saori Leandro Felipe Jennifer

2 Índice Introdução História GO Conclusão Refêrencia
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 GO Conclusão Refêrencia
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 GO Conclusão Refêrencia
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:
C e Unix tornaram-se dominante nas pesquisas; 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; C++ se tornou a principal escolha na indústria e nas pesquisas universitarias; Java surgiu como uma visão mais limpa de C++, 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 GO Refêrencia 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 GO Conclusão Refêrencia
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 <stdio.h> 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": case "1", "2", "3": }

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 GO Conclusão Refêrencia
Observações iniciais Moderno x Antigo GO Básico Orientação a objetos Algoritmo Exemplo Conclusão Refêrencia

29 Orientação a objetos http://golang.org
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 GO Conclusão Refêrencia
Observações iniciais Moderno x Antigo GO Básico Orientação a objetos Algoritmo Exemplo Conclusão Refêrencia

50 Quick Sort (Java) http://golang.org
public static void quick_sort(int []v,int ini, int fim){ int meio; if(ini<fim){ meio = partition(v,ini,fim); quick_sort(v,ini,meio); quick_sort(v,meio+1,fim); }

51 Quick Sort (Java) http://golang.org
public static int partition(int []v, int ini, int fim){ int pivo, topo,i; pivo = v[ini]; topo = ini; for(i=ini+1;i<fim;i++){ if(v[i]<pivo){ v[topo]=v[i]; v[i]=v[topo+1]; topo++; } v[topo]=pivo; return topo;

52 Quick Sort (Java + Go) http://golang.org
func quick_sort(v []int,ini, fim int){ var meio int if ini<fim { meio = partition(v,ini,fim) quick_sort(v,ini,meio) quick_sort(v,meio+1,fim) }

53 Quick Sort (Java + Go) http://golang.org
func partition(v []int,ini, fim int) int{ var pivo, topo, i int pivo = v[ini] topo = ini for i=ini+1; i<fim; i++ { if(v[i]<pivo){ v[topo]=v[i] v[i]=v[topo+1] topo++ } v[topo]=pivo return topo

54 Quick Sort (Go) http://golang.org
func quick_sort(v []int){ var meio int if 0<len(v)-1 { meio = partition(v) quick_sort(v[0:meio]) quick_sort(v[meio+1:len(v)]) }

55 Quick Sort (Go) http://golang.org
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]<pivo){ v[topo]=v[i] v[i]=v[topo+1] topo++ } v[topo]=pivo return topo

56 Índice Introdução História GO Conclusão Refêrencia
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 GO Conclusão Refêrencia
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/tutorial/go
“ pike-stanford” Go Course Day (1, 2 e 3)


Carregar ppt "Ricardo Saori Leandro Felipe Jennifer"

Apresentações semelhantes


Anúncios Google