Apresentação do PowerPoint

Propaganda
Language
Ricardo
Saori
Leandro
Felipe
http://golang.org
Jennifer
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
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.
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
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.
http://golang.org
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.
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
-
Básico
Orientação a objetos
Algoritmo Exemplo
Conclusão
- Conclusão
- Refêrencia
http://golang.org
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.
http://golang.org
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.
http://golang.org
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).
http://golang.org
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.
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
Hello World!
Em C:
#include <stdio.h>
int main(){
printf("Hello World!");
return 0;
}
http://golang.org
Hello World!
Em Java:
public class Main {
public static void main(String[] args) {
System.out.print("Hello World!");
}
}
http://golang.org
Hello World!
Em Ruby:
puts “Hello World!”
http://golang.org
Hello World!
Em Go:
import "fmt"
func main() {
fmt.Print("Hello World!")
}
http://golang.org
Γειά σου Κόσμε!"
Em Go:
import "fmt"
func main() {
fmt.Print("Γειά σου Κόσμε!")
}
http://golang.org
こんにちは、世界!
Em Go:
import "fmt"
func main() {
fmt.Print("こんにちは、世界!")
}
http://golang.org
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)
http://golang.org
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"
http://golang.org
Váriaveis
Tipos numéricos: uso de palavras intuitivas,
sem conversões implicitas ( int != int32)
http://golang.org
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
http://golang.org
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
}
http://golang.org
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 */
}
http://golang.org
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
}
http://golang.org
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
}
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
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()}
http://golang.org
Orientação a objetos
• Classe: representa um conjunto de
objetos com características afins.
• (mais especialmente uma
interface)
http://golang.org
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
http://golang.org
Orientação a objetos (Java)
public class C1 /*extendsObject*/{
//lista de atributos
//construtor
//metodos
//classes internas
}
http://golang.org
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?
http://golang.org
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)); ...}
http://golang.org
Orientação a objetos (C)
E para manipularmos este novo tipo?
void add(A* a, int i){ ...
//aqui dentro manipulamos “a”..
}
http://golang.org
Orientação a objetos (C)
O que você mais odeia em C quando esta
lidando com tipos novos de dados?
http://golang.org
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?
http://golang.org
Orientação a objetos
Orientação a objetos resolveria isso!
a.add(i);
Simples assim!
http://golang.org
“Orientação a objetos” (Go)
Em go não existe classe!
Mas existe interface...
type A interface {
add(i int)
...}
http://golang.org
“Orientação a objetos” (Go)
Mas em quem a função add(int) vai agir?
http://golang.org
“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.
http://golang.org
“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).
http://golang.org
Orientação a objetos
// retorna um
ponteiro para uma nova variável
http://golang.org
add(int) e
aplicáveis
*arv
as funões
max() são
apenas ao tipo
E onde entra a interface na história?
Nossa estrutura criada obedece estas três
interfaces pois existem os métodos
add(int) e max() que são aplicáveis a ela.
• 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”
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
Quick Sort
(Java)
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);
}
}
http://golang.org
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<fim;i++){
if(v[i]<pivo){
v[topo]=v[i];
v[i]=v[topo+1];
topo++;
}
}
v[topo]=pivo;
return topo;
}
http://golang.org
Quick Sort
(Java + Go)
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)
}
}
http://golang.org
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<fim; i++ {
if(v[i]<pivo){
v[topo]=v[i]
v[i]=v[topo+1]
topo++
}
}
v[topo]=pivo
return topo
}
http://golang.org
Quick Sort
(Go)
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)])
}
}
http://golang.org
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]<pivo){
v[topo]=v[i]
v[i]=v[topo+1]
topo++
}
}
v[topo]=pivo
return topo
}
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
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.
http://golang.org
Índice
- Introdução
- História
- Observações iniciais
- Moderno x Antigo
- GO
- Básico
- Orientação a objetos
- Algoritmo Exemplo
- Conclusão
- Refêrencia
http://golang.org
Referência
- https://
sites.google.com/a/danielmazza.info/tut
orial/go
- http://golang.org/doc/effective_go.html
- “100428-pike-stanford”
- Go Course Day (1, 2 e 3)
http://golang.org
Download