SlideShare uma empresa Scribd logo
1 de 38
Javascript para
Desenvolvedores C#
Sobre o curso
Javascript
Comparação
Parte 1:
Functions
Parte 2:
Conceitos
Parte 3:
POO
Parte 4:
Javascript para CSharpers
Javascript para desenvolvedores acostumados com a orientação a
objetos do .Net
POO
Sumário
• Javascript não é orientado a objetos, mas podemos
força-lo a ser
• Objetos Dinâmicos
• “Classes”
• Prototype
• Herança
• Abstract
• Extensions Methods
POO
Objetos Dinâmicos
• C# Suporta Inicializadores de objetos dinâmicos
//C#
var cliente = new Cliente()
{
Nome = "Thiago",
Companhia = "Academia do Programador",
DataFormatura = " 11/11/11",
Endereco = new Endereco()
{
Cidade = "Lages",
Estado = "SC",
Bairro = "Coral"
},
Apelidos = new List<Apelido>()
{
new Apelido("Thiago Jr"),
new Apelido("Juninho"),
new Apelido("Tio Sartas")
}
};
//C#
var cliente = new {
Nome = "Thiago",
Companhia = "Academia do Programador",
DataFormatura = " 11/11/11",
Endereco = new
{
Cidade = "Lages",
Estado = "SC",
Bairro = "Coral"
},
Apelidos = new[]
{
"Thiago Jr",
"Juninho",
"Tio Sartas",
}
};
cliente.novaPropriedade = "";
POO
Objetos Dinâmicos
• No Javascript, isso é natural
//Javascript
var cliente = {
Nome: "Thiago",
Companhia: "Academia do Programador",
'Data Formatura': "11/11/11",
Endereco: {
Cidade: "Lages",
Estado: "SC",
Bairro: "Coral“
},
Apelidos: [
"Thiago Jr",
"Juninho",
"Tio Sartas"
]
};
cliente.novaPropriedade = "";
POO
Objetos Dinâmicos
• Sintaxe Ponto
• Sintaxe Colchete
//Javascript
var nome = cliente.nome;
var nome2 = cliente["nome"];
var data = cliente. "Data Formatura";// Nope
var data2 = cliente["Data Formatura"];
var cidade = cliente.Endereco.Cidade;
var cidade2 = cliente["Endereco"]["Cidade"];
var cidade3 = cliente["Endereco"].Cidade;
cliente["Entrar de férias"] = function() {
return {"Dias tirados":20};
};
cliente["Entrar de férias"]();
var dias = cliente["Entrar de férias"]()["Dias tirados"];
POO
Objetos Dinâmicos
• No .NET, dynamic + ExpandoObject tem esse
comportamento
POO
“Classes”
• No .NET, Classes são receitas bem definidas para criação
de objetos
• Containers para dados, código e comportamento
//C#
class Cliente {
string Nome { get; set; }
string Empresa { get; set; }
public Cliente(string nome, string empresa="")
{
Nome = nome;
Empresa = empresa;
}
}
POO
“Classes”
• No .NET, Classes são receitas bem definidas para criação
de objetos
• Containers para dados, código e comportamento
//C#
class Cliente {
string Nome { get; set; }
string Empresa { get; set; }
public Cliente(string nome, string empresa="")
{
Nome = nome;
Empresa = empresa;
}
}
//Javascript
function Cliente(nome, empresa) {
this.nome = nome;
this.empresa = empresa;
this.enviarEmail = function(email) { };
}
var c = new Cliente('Sonic', "SEGA");
c.enviarEmail("sonic@sega.com");
POO
“Classes”
• Mas tudo precisa ser público??
• Nope.. Closures servem para isso
//Javascript
function Cliente(nome,empresa) {
//public
this.nome = nome;
this.empresa = empresa;
//private
var mailServer = 'mail.google.com';
this.enviarEmail=function(email) {
endEmailViaServer(mailServer, email);
}
}
POO
“Classes”
• E propriedades?
• Sintaxe especial.. Use apenas se necessário
• Readonly?
//Javascript
function Cliente(nome) {
var _nome = nome;
this.empresa = empresa;
//{ get; set; }
Object.defineProperty(this, 'nome', {
get:function () { return "Mr. " + _nome; },
set:function(value) { _nome = value.toLowerCase(); }
});
}
POO
“Classes”
• Membros Estáticos
//Javascript
function Cliente(nome,empresa) {
this.nome = nome;
this.empresa = empresa;
}
Cliente.mailServer = 'mail.google.com';
var c = new Cliente();
var srv = c.mailServer; //nope
srv = Cliente.mailServer; //yep
• Crie a classe Calculadora
• Ela terá todos os métodos convencionais, incluindo MOD
• (opcional) Use jQuery para relacionar eventos aos controladores
• Seu construtor recebe um nome que não pode ser alterado (somente
leitura) (ex: “Casio”)
• Crie a classe Operação(number, number, string operator)
• Antes de executar cada operação, salve num histórico
privado na calculadora
Quiz
• O que essas chamadas irão logar?
function Cliente() {
var index = 1;
this.index = 2;
Object.defineProperty(this, "Index", {
get: function () { return index; }
})
}
Cliente.Index = 4;
var c = new Cliente();
console.log(c.Index);
console.log(c.index);
console.log(Cliente.index);
console.log(Cliente.Index);
Quiz
• O que essas chamadas irão logar?
function Cliente() {
var index = 1;
this.index = 2;
Object.defineProperty(this, "Index", {
get: function () { return index; }
})
}
Cliente.Index = 4;
var c = new Cliente();
console.log(c.Index);
console.log(c.index);
console.log(Cliente.index);
console.log(Cliente.Index);
//1
//2
//undefined
//4
POO
O objeto Prototype
• Principal elo de correlação entre objetos em Javascript
• Cada objeto tem uma propriedade prototype
• É somente um objeto, e pode ter propriedades atribuídas nele
• Todas as propriedades de um “tipo” são compartilhadas entre
as instancias
POO
O objeto Prototype
//Javascript
function Animal(raca, comida) {
this.raca = raca;
this.comida = comida;
}
//Funciona mas não acessa dados privados
Animal.enviarEmail = function() {};
//Funciona e deixa acessar dados privados
Animal.prototype.enviarEmail=function(){
return this.raca+"@foo.baz"
}
var c = new Animal("Coelho");
log(c.raca); //Coelho
log(c.enviarEmail()); //Coelho@foo.baz
var c = new Animal("Vaca");
log(c.raca); //Vaca
log(c.enviarEmail()); //Vaca@foo.baz
function Animal(raca, comida) {
this.raca = raca;
this.comida = comida;
this.
}
enviarEmail=function(){
return this.raca+"@foo.baz"
}
Mas qual a diferença de fazer isso?
POO
Herança
function Animal(comida) {
this.comida = comida || "Nada";
}
Animal.prototype.comer=function(){
console.log( "comendo: "+this.comida);
};
var a = new Animal();
a.comer(); //"Comendo: nada“
log(a instanceof Animal); // true
function Coelho(cor){
this.cor=cor||"Branco";
}
//Automágica!
Coelho.prototype=new Animal("Legumes");
var c = new Coelho("Branco");
c.comer(); //"Comendo: legumes“
log(c instanceof Animal); //true
POO
Classe abstrata
var Animal = {
comida:'nada',
comer:function(){
log(this.comida)
}
}
function Coelho(cor){
this.cor=cor;
this.comida="legumes";
}
Coelho.prototype=Animal;
var c = new Coelho("Branco");
c.comer() //legumes
log(c instanceof Coelho); //true
log(c instanceof Animal) //error
POO
Extensions
• Prototype também pode ser usado para criar Extension
Methods
String.prototype.skipWords = function(qts) {
var split = this.split(' ');
var result = '';
for (i = qts; i < split.length; i += 1) {
result += split[i] + " ";
}
return result;
};
log("alguma string bem grande cheia de palavras".skipWords(4)); //"cheia de palavras“
• Agora temos uma calculadora binária que herda da calculadora
convencional
• Todos os métodos antigos são postos em prototype
• Adicione métodos para converter e desconverter binários
• Adicione o método para converter para binário no protótipo da classe
String, para que possa ser usada dessa forma:
“400”.toBinary();
POO
Mais coisas de Classes
• Private
• Via closures e variáveis locais
• Protected
• Não suportado
• Sobrecarga de construtores
• Não, apenas sobrescrita de métodos
POO
E as interfaces?
• São desnecessárias
• Sinta-se confortável com DuckTyping
function Animal(comida){
this.comida= comida ||"nada";
this.mover=function(){};
}
function Carro(comb){
this.combustível=comb||"Diesel";
this.mover=function(){};
}
function mover(obj) {
obj.mover = obj.mover || function() {};
if(obj.mover)
obj.mover();
}
Quiz
Atribuir um método ao prototype e atribuir ao this da classe tem a
mesma usabilidade
• Falso
• Verdadeiro
• Atribuirum método ao prototype e atribuir ao this da classe tem o
mesmo desempenho
• Verdadeiro
• Falso
Quiz
Atribuir um método ao prototype e atribuir ao this da classe tem a
mesma usabilidade
• Falso
• Verdadeiro
• Atribuirum método ao prototype e atribuir ao this da classe tem o
mesmo desempenho
• Verdadeiro
• Falso
Quiz
Quais os possíveis usos do prototype?
Quiz
Quais os possíveis usos do prototype?
• Executar um trecho de código apenas uma vez,. E que seja usado por
todas as instancias
• Simular Herança e classe Abstrata
• Extension Methods
• Todos os objetos são dinâmicos
• Sintaxe colchete
• Classes
• Herança
Javascript para CSharpers
Javascript para desenvolvedores acostumados com a orientação a
objetos do .Net

Mais conteúdo relacionado

Mais procurados

Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?Diego Pacheco
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Conhecendo Ruby on Rails
Conhecendo Ruby on RailsConhecendo Ruby on Rails
Conhecendo Ruby on RailsSergio Henrique
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao RubyMilton Moura
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novoGiovanni Bassi
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens PooInfogenius
 

Mais procurados (20)

Aula02
Aula02Aula02
Aula02
 
Scjp - Assignments
Scjp - AssignmentsScjp - Assignments
Scjp - Assignments
 
Pilhas java
Pilhas javaPilhas java
Pilhas java
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?TDC 2014 POA: Programacao funcional Por que Importa?
TDC 2014 POA: Programacao funcional Por que Importa?
 
NHibernate
NHibernateNHibernate
NHibernate
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
Conhecendo Ruby on Rails
Conhecendo Ruby on RailsConhecendo Ruby on Rails
Conhecendo Ruby on Rails
 
Introdução ao Ruby
Introdução ao RubyIntrodução ao Ruby
Introdução ao Ruby
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Migrando pra Scala
Migrando pra ScalaMigrando pra Scala
Migrando pra Scala
 
Javascript
JavascriptJavascript
Javascript
 
POO - Aula 003
POO - Aula 003POO - Aula 003
POO - Aula 003
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
05 poo-ii
05   poo-ii05   poo-ii
05 poo-ii
 
C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Linguagens Poo
Linguagens PooLinguagens Poo
Linguagens Poo
 

Destaque

Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Javascript Orientado a Objeto
Javascript Orientado a ObjetoJavascript Orientado a Objeto
Javascript Orientado a ObjetoFábio Elísio
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosDanilo Sato
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Pablo Dall'Oglio
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serioJaydson Gomes
 

Destaque (10)

Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Say It With Javascript
Say It With JavascriptSay It With Javascript
Say It With Javascript
 
Biblia
BibliaBiblia
Biblia
 
Javascript Orientado a Objeto
Javascript Orientado a ObjetoJavascript Orientado a Objeto
Javascript Orientado a Objeto
 
Curso javascript básico
Curso javascript básicoCurso javascript básico
Curso javascript básico
 
Javascript OO
Javascript OOJavascript OO
Javascript OO
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 
Javascript para adultos
Javascript para adultosJavascript para adultos
Javascript para adultos
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 

Semelhante a Javascript para CSharpers 4 - POO

Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Rogério Moraes de Carvalho
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)Helder da Rocha
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Saulo Arruda
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3klaussilveira
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Rogério Moraes de Carvalho
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Thyago Maia
 

Semelhante a Javascript para CSharpers 4 - POO (20)

Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
 
Hibernate-consultas
Hibernate-consultasHibernate-consultas
Hibernate-consultas
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
Introdução a JPA (2010)
Introdução a JPA (2010)Introdução a JPA (2010)
Introdução a JPA (2010)
 
Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1Desenvolvimento iOS - Aula 1
Desenvolvimento iOS - Aula 1
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3Preparando-se para a prova da Certificação Zend PHP 5.3
Preparando-se para a prova da Certificação Zend PHP 5.3
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1Fundamentos da Programação PHP OO - Aula 1
Fundamentos da Programação PHP OO - Aula 1
 
Aula2
Aula2Aula2
Aula2
 

Mais de Wesley Lemos

Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryWesley Lemos
 
Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Wesley Lemos
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
Dicas sobre amamentar
Dicas sobre amamentarDicas sobre amamentar
Dicas sobre amamentarWesley Lemos
 
Apresentação VideoSis
Apresentação VideoSisApresentação VideoSis
Apresentação VideoSisWesley Lemos
 
Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!Wesley Lemos
 
Asus a7 v400 mx se
Asus a7 v400 mx seAsus a7 v400 mx se
Asus a7 v400 mx seWesley Lemos
 
Como fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoComo fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoWesley Lemos
 

Mais de Wesley Lemos (12)

Javascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQueryJavascript para CSharpers - Append B - jQuery
Javascript para CSharpers - Append B - jQuery
 
Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM Javascript para CSharpers - Append A - DOM
Javascript para CSharpers - Append A - DOM
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Dicas sobre amamentar
Dicas sobre amamentarDicas sobre amamentar
Dicas sobre amamentar
 
Apresentação VideoSis
Apresentação VideoSisApresentação VideoSis
Apresentação VideoSis
 
Lição ebd
Lição ebdLição ebd
Lição ebd
 
Learn with portals!
Learn with portals!Learn with portals!
Learn with portals!
 
Go project
Go projectGo project
Go project
 
Criatividade
CriatividadeCriatividade
Criatividade
 
Asus a7 v400 mx se
Asus a7 v400 mx seAsus a7 v400 mx se
Asus a7 v400 mx se
 
Como fazer uma apresentação de sucesso
Como fazer uma apresentação de sucessoComo fazer uma apresentação de sucesso
Como fazer uma apresentação de sucesso
 
Hotelaria
HotelariaHotelaria
Hotelaria
 

Javascript para CSharpers 4 - POO

  • 2. Sobre o curso Javascript Comparação Parte 1: Functions Parte 2: Conceitos Parte 3: POO Parte 4:
  • 3. Javascript para CSharpers Javascript para desenvolvedores acostumados com a orientação a objetos do .Net
  • 4.
  • 5. POO Sumário • Javascript não é orientado a objetos, mas podemos força-lo a ser • Objetos Dinâmicos • “Classes” • Prototype • Herança • Abstract • Extensions Methods
  • 6.
  • 7. POO Objetos Dinâmicos • C# Suporta Inicializadores de objetos dinâmicos //C# var cliente = new Cliente() { Nome = "Thiago", Companhia = "Academia do Programador", DataFormatura = " 11/11/11", Endereco = new Endereco() { Cidade = "Lages", Estado = "SC", Bairro = "Coral" }, Apelidos = new List<Apelido>() { new Apelido("Thiago Jr"), new Apelido("Juninho"), new Apelido("Tio Sartas") } }; //C# var cliente = new { Nome = "Thiago", Companhia = "Academia do Programador", DataFormatura = " 11/11/11", Endereco = new { Cidade = "Lages", Estado = "SC", Bairro = "Coral" }, Apelidos = new[] { "Thiago Jr", "Juninho", "Tio Sartas", } }; cliente.novaPropriedade = "";
  • 8. POO Objetos Dinâmicos • No Javascript, isso é natural //Javascript var cliente = { Nome: "Thiago", Companhia: "Academia do Programador", 'Data Formatura': "11/11/11", Endereco: { Cidade: "Lages", Estado: "SC", Bairro: "Coral“ }, Apelidos: [ "Thiago Jr", "Juninho", "Tio Sartas" ] }; cliente.novaPropriedade = "";
  • 9. POO Objetos Dinâmicos • Sintaxe Ponto • Sintaxe Colchete //Javascript var nome = cliente.nome; var nome2 = cliente["nome"]; var data = cliente. "Data Formatura";// Nope var data2 = cliente["Data Formatura"]; var cidade = cliente.Endereco.Cidade; var cidade2 = cliente["Endereco"]["Cidade"]; var cidade3 = cliente["Endereco"].Cidade; cliente["Entrar de férias"] = function() { return {"Dias tirados":20}; }; cliente["Entrar de férias"](); var dias = cliente["Entrar de férias"]()["Dias tirados"];
  • 10. POO Objetos Dinâmicos • No .NET, dynamic + ExpandoObject tem esse comportamento
  • 11.
  • 12. POO “Classes” • No .NET, Classes são receitas bem definidas para criação de objetos • Containers para dados, código e comportamento //C# class Cliente { string Nome { get; set; } string Empresa { get; set; } public Cliente(string nome, string empresa="") { Nome = nome; Empresa = empresa; } }
  • 13. POO “Classes” • No .NET, Classes são receitas bem definidas para criação de objetos • Containers para dados, código e comportamento //C# class Cliente { string Nome { get; set; } string Empresa { get; set; } public Cliente(string nome, string empresa="") { Nome = nome; Empresa = empresa; } } //Javascript function Cliente(nome, empresa) { this.nome = nome; this.empresa = empresa; this.enviarEmail = function(email) { }; } var c = new Cliente('Sonic', "SEGA"); c.enviarEmail("sonic@sega.com");
  • 14. POO “Classes” • Mas tudo precisa ser público?? • Nope.. Closures servem para isso //Javascript function Cliente(nome,empresa) { //public this.nome = nome; this.empresa = empresa; //private var mailServer = 'mail.google.com'; this.enviarEmail=function(email) { endEmailViaServer(mailServer, email); } }
  • 15. POO “Classes” • E propriedades? • Sintaxe especial.. Use apenas se necessário • Readonly? //Javascript function Cliente(nome) { var _nome = nome; this.empresa = empresa; //{ get; set; } Object.defineProperty(this, 'nome', { get:function () { return "Mr. " + _nome; }, set:function(value) { _nome = value.toLowerCase(); } }); }
  • 16. POO “Classes” • Membros Estáticos //Javascript function Cliente(nome,empresa) { this.nome = nome; this.empresa = empresa; } Cliente.mailServer = 'mail.google.com'; var c = new Cliente(); var srv = c.mailServer; //nope srv = Cliente.mailServer; //yep
  • 17.
  • 18. • Crie a classe Calculadora • Ela terá todos os métodos convencionais, incluindo MOD • (opcional) Use jQuery para relacionar eventos aos controladores • Seu construtor recebe um nome que não pode ser alterado (somente leitura) (ex: “Casio”) • Crie a classe Operação(number, number, string operator) • Antes de executar cada operação, salve num histórico privado na calculadora
  • 19.
  • 20. Quiz • O que essas chamadas irão logar? function Cliente() { var index = 1; this.index = 2; Object.defineProperty(this, "Index", { get: function () { return index; } }) } Cliente.Index = 4; var c = new Cliente(); console.log(c.Index); console.log(c.index); console.log(Cliente.index); console.log(Cliente.Index);
  • 21. Quiz • O que essas chamadas irão logar? function Cliente() { var index = 1; this.index = 2; Object.defineProperty(this, "Index", { get: function () { return index; } }) } Cliente.Index = 4; var c = new Cliente(); console.log(c.Index); console.log(c.index); console.log(Cliente.index); console.log(Cliente.Index); //1 //2 //undefined //4
  • 22.
  • 23. POO O objeto Prototype • Principal elo de correlação entre objetos em Javascript • Cada objeto tem uma propriedade prototype • É somente um objeto, e pode ter propriedades atribuídas nele • Todas as propriedades de um “tipo” são compartilhadas entre as instancias
  • 24. POO O objeto Prototype //Javascript function Animal(raca, comida) { this.raca = raca; this.comida = comida; } //Funciona mas não acessa dados privados Animal.enviarEmail = function() {}; //Funciona e deixa acessar dados privados Animal.prototype.enviarEmail=function(){ return this.raca+"@foo.baz" } var c = new Animal("Coelho"); log(c.raca); //Coelho log(c.enviarEmail()); //Coelho@foo.baz var c = new Animal("Vaca"); log(c.raca); //Vaca log(c.enviarEmail()); //Vaca@foo.baz function Animal(raca, comida) { this.raca = raca; this.comida = comida; this. } enviarEmail=function(){ return this.raca+"@foo.baz" } Mas qual a diferença de fazer isso?
  • 25. POO Herança function Animal(comida) { this.comida = comida || "Nada"; } Animal.prototype.comer=function(){ console.log( "comendo: "+this.comida); }; var a = new Animal(); a.comer(); //"Comendo: nada“ log(a instanceof Animal); // true function Coelho(cor){ this.cor=cor||"Branco"; } //Automágica! Coelho.prototype=new Animal("Legumes"); var c = new Coelho("Branco"); c.comer(); //"Comendo: legumes“ log(c instanceof Animal); //true
  • 26. POO Classe abstrata var Animal = { comida:'nada', comer:function(){ log(this.comida) } } function Coelho(cor){ this.cor=cor; this.comida="legumes"; } Coelho.prototype=Animal; var c = new Coelho("Branco"); c.comer() //legumes log(c instanceof Coelho); //true log(c instanceof Animal) //error
  • 27. POO Extensions • Prototype também pode ser usado para criar Extension Methods String.prototype.skipWords = function(qts) { var split = this.split(' '); var result = ''; for (i = qts; i < split.length; i += 1) { result += split[i] + " "; } return result; }; log("alguma string bem grande cheia de palavras".skipWords(4)); //"cheia de palavras“
  • 28.
  • 29. • Agora temos uma calculadora binária que herda da calculadora convencional • Todos os métodos antigos são postos em prototype • Adicione métodos para converter e desconverter binários • Adicione o método para converter para binário no protótipo da classe String, para que possa ser usada dessa forma: “400”.toBinary();
  • 30. POO Mais coisas de Classes • Private • Via closures e variáveis locais • Protected • Não suportado • Sobrecarga de construtores • Não, apenas sobrescrita de métodos
  • 31. POO E as interfaces? • São desnecessárias • Sinta-se confortável com DuckTyping function Animal(comida){ this.comida= comida ||"nada"; this.mover=function(){}; } function Carro(comb){ this.combustível=comb||"Diesel"; this.mover=function(){}; } function mover(obj) { obj.mover = obj.mover || function() {}; if(obj.mover) obj.mover(); }
  • 32.
  • 33. Quiz Atribuir um método ao prototype e atribuir ao this da classe tem a mesma usabilidade • Falso • Verdadeiro • Atribuirum método ao prototype e atribuir ao this da classe tem o mesmo desempenho • Verdadeiro • Falso
  • 34. Quiz Atribuir um método ao prototype e atribuir ao this da classe tem a mesma usabilidade • Falso • Verdadeiro • Atribuirum método ao prototype e atribuir ao this da classe tem o mesmo desempenho • Verdadeiro • Falso
  • 35. Quiz Quais os possíveis usos do prototype?
  • 36. Quiz Quais os possíveis usos do prototype? • Executar um trecho de código apenas uma vez,. E que seja usado por todas as instancias • Simular Herança e classe Abstrata • Extension Methods
  • 37. • Todos os objetos são dinâmicos • Sintaxe colchete • Classes • Herança
  • 38. Javascript para CSharpers Javascript para desenvolvedores acostumados com a orientação a objetos do .Net

Notas do Editor

  1. Classes no C# contem propriedades e eventos bem definidos, seria útil se pudéssemos replicar essa estrutura no Javascript