Ruby-on-RailsMário Sérgio Coelho Marroquim
@mariomarroquim
Sobre o curso
• Curso prático para formar profissionais para o mercado que possam fazer a diferença e produzir resultados reais
• Foco na maior demanda do mercado: aplicações comerciais
Sobre as aulas
• Cada aula se dividirá em 3 partes– Explicação do assunto– Perguntas e respostas– Atividades práticas
Ruby?
• Surgiu em 1995
• Criada por Yukihiro Matsumoto, “Matz”
• Linguagem de programação TOTALMENTE orientada a objetos
• Linguagem de script interpretada
• Muito utilizada em scripts para as mais diversas finalidades
Ruby?
• Possui sintaxe absurdamente simples
• É totalmente extensível
• É suficientemente rápido
• Possui um sistema centralizado para distribuição de bibliotecas (gems), o Ruby Gems
• Comunidade grande
• Muita documentação disponível
Linguagem de programação?
• Uma linguagem de programação é– Um conjunto de instruções de alto nível que
o computador vai ter de executar– Uma linguagem mais “humana” que deve ser
convertida em uma “linguagem de máquina” (linguagem de baixo nível) para ser executada pelo computador
Como o Ruby funciona?
• O computador não entende o código-fonte escrito com linguagens de alto nível
• O computador precisa interpretá-lo e transformá-lo em algo que possa ser executado pelo seu processador
• Esse processo envolve interpretação do código-fonte
Como o Ruby funciona?
• Para cada SO existe um interpretador Ruby específico, capaz de interpretar o código-fonte (“.rb”) e executar a aplicação
• Ruby, portanto, é independente de SO
• Ruby possui interpretadores para Windows, Linux, MacOS, OS/2, etc
Orientação a objetos?
• Atualmente os programas são muito complexos
• Não dá para escrever todo o código-fonte em um só arquivo
• Não dá para espalhar o código-fonte entre vários arquivos de forma desorganizada e repetitiva a cada projeto
Orientação a objetos?
• É muito mais fácil trabalhar com objetos da vida real para dar instruções ao computador
• Tudo pode ser convertido em objetos
• Classes representam um modelo (especificação) para criação de objetos
• Uma classe define um tipo de objeto
Orientação a objetos?
• Um objeto chamado “cachorro” que vem da classe “animal” é diferente de um objeto “gol voyage” criado a partir da classe “carro”
• O código-fonte fica distribuído em classes diferentes
• Cada classe reúne atributos e funcionalidades (métodos) específicas
Orientação a objetos?
• Classes possuem atributos (estado) e funcionalidades (comportamento)
• Objetos da mesma classe podem se comportar de maneira diferente caso o valor de seus atributos seja diferente
• É um padrão para organizar todo o código-fonte em arquivos separados de modo que todos possam entender
Orientação a objetos?
Especificação deuma Conta
ATRIBUTOS+
COMPORTAMENTO
Nome: MárioSaldo: R$ 1.500,00
Nome: PauloSaldo: R$ 500,00
Nome: SaraSaldo: R$ 5.200,00
Orientação a objetos?
• Objetos ajudam a escrever as instruções para o computador de maneira mais humana e simples
• Classes representam bibliotecas muito úteis pois encapsulam atributos e comportamentos específicos que podem ser usados por qualquer um!
Orientação a objetos?
Orientação a objetos?
• Checklist– Classes– Objetos– Atributos (estado)– Métodos (comportamento)– Mensagens e parâmetros– Encapsulamento e divisão de interesses
Ferramentas especiais
• ruby – interpretador
• irb – terminal interativo
• ri – utilitário para ver documentação
• Só isso mesmo
Regras básicas
• Criação de um objeto– objeto = Tipo.new
• Atribuição de valores– variavel = valor
• Ruby é case sensitive
Regras básicas
• Nomes de classes seguem o camel case– Animal, EspecialidadeMedica
• Variáveis e métodos seguem outra forma– animal, gol_sedan, especialidade_medica
• Blocos de código começam e terminam com “{” e “}” ou “do ... end”
Tipos mais comuns
• Fixnum - 1, 456, -9856
• Float - 944.44, 12343,3543454
• Boolean – true ou false
• Date – representa uma data
• String – representa um texto qualquer (“..”)
Mãos na massa!
• Checklist– Hello word!– Utilização de variáveis– Interpolação de strings– Operações matemáticas– Constantes– Ranges– Arrays– Símbolos– Hashes– Procs/lambda
Mãos na massa!
• Checklist– If, else, unless– Métodos– Classes– Módulos– Tratamento de erros– Modelagem básica
Rails?
• Criado em julho de 2004 por David Heinemeier Hansson, “DHH”
• Framework fullstack para desenvolvimento web utilizando Ruby
• Atua em todas as camadas (MVC) de uma aplicação web
• Implementa a filosofia DRY
• Utiliza Convention over Configuration
Rails?
• Possui suporte completo a diversas tecnologias desde Ajax até Web Services
• Possui uma comunidade grande e uma enorme quantidade de plugins para todo o tipo de coisa
• Facilita muito o desenvolvimento de aplicações web reduzindo a quantidade de configurações e dependências necessárias para se iniciar um projeto
Fullstack?
• Rails é um pacote completo...
RUBY+
RAILS+
APACHE
JAVA+
HIBERNATE/JPA+
SPRING/STRUTS+
TOMCAT+
APACHE
Web?
• Modelo básico de funcionamento de uma aplicação web
CLIENTE(navegador, celular, etc)
SERVIDOR
Requisição(request)
Resposta(response)
MVC?
• Apenas um padrão para dividir as partes (camadas) de uma aplicação
• Model – Toda a lógica de negócios e interação com as bases de dados
• Controller – Redireciona o usuário de acordo com o que ele quer, controla acesso a determinados “lugares”, etc
• View – camada de visão (CSS, HTML, Javascript, flash, etc)
MVC?
• Modelo mais elaborado de funcionamento de uma aplicação web
CLIENTE(navegador, celular, etc)
Requisição(request)
Resposta(response)
C M
v
MVC?
• MVC by Rails– Mantenha o model “gordo”– Mantenha a view estúpida– “Seque” os controllers
Rails?
• O Rails tem um módulo para cada necessidade• Active Record – comunicação com os SGBDs• Action Pack
– Action View – geração de views– Action Controller – controle de fluxo
• Action Mailer – suporte completo a emails• Active Support – coisinhas legais• Action WebServices – WSDL, SOAP, REST
Mãos na massa!
• Checklist (Active Record)– Migrations– Models– Relacionamentos entre models– Validações– Operações CRUD– Finders dinâmicos– TDD (Test-Driven Development)
Mãos na massa!
• Checklist (Action Pack)– Geração de controllers– Criação de views– Utilização de templates– Sessão, autenticação e autorização– Ajax!!!– Plugins legais
Fim do começo...
• Ainda há muito o que aprender!
• http://guias.rubyonrails.pro.br/
• http://railscasts.com/
• http://peepcode.com/
• http://www.rubyinside.com.br/
• http://www.akitaonrails.com/