SlideShare uma empresa Scribd logo
1 de 22
Git e GitHub
Git
- Controle de versões
- Backup do código (segurança)
Principais Comandos
$ git init - Cria um repositório local
$ git clone url - Clona um repositório remoto para uma pasta local
$ git remote add <uri> - Adiciona um repositório remoto (não necessário caso tenha sido usado o
clone)
$ git add <files> - Adiciona ao index
$ git commit -m “Message” - Commit dos arquivos do index
$ git pull - Atualiza os arquivos locais baseados no repositório remoto
$ git push origin master - Envia os arquivos para o repositório remoto, na branch master
$ git checkout -b <branch> - Cria uma branch e troca para ela
$ git merge <branch> - Faz o merge de uma branch para a outra
GitHub
- Plataforma de hospedagem
- Compartilhamento de código
- Contribuição para projetos OpenSource
https://github.com/
OOP
Object-Oriented
Programming
Procedural x OO
OOP
● Objetos
● Campos e
métodos
● Reaproveitamento
de código
● Métodos com
poucos
parametros
● Controle de
acesso
Programção
Procedural
● Lista de
procedimentos
● Muitas variáveis
● Muito
Copy+Paste
● Funções com
muitos
parâmetros
● Dificil
manutenção
let titular = "Douglas";
let cpf = 11122233345;
let cc = 987654;
let saldo = 500;
function saca(saldo, valor) {
return saldo - valor;
}
let conta = {
titular: "Douglas",
cpf: 11122233345,
cc: 987654,
saldo: 500,
saca: function(valor) {
return this.saldo - valor;
}
}
● Programação Procedural
● OOP
OOP
PolimorfismoAbstraçãoHerançaEncapsulamento
Algumas práticas:
- Information Hidding
- Tell, don’t ask (Mande, não peça)
- Programação voltada a interface
- Lei de Demeter
- Liskov Substitute Principle
Modificadores de
Acesso
● Segurança de código
● Responsabilidade única com o private
Class
Packag
e
2
protected
1
public
Subclass World
3
no-modifier
4
private
Como saber se está bem
encapsulado?
NotaFiscal nf = new NotaFiscal();
double valor = nf.calculaValorImposto();
O que o método faz?
Como ele faz?
Encapsulamento
Herança
● Um objeto adquire as propriedades e
comportamentos da classe mãe
● Cria uma relação mãe-filho(parent-
child) entre duas classes
● Mecanismo robusto e natural para
organizar e estruturar softwares
Livro
Livro Fisico E-Book
E-Bok2E-Book1Livro2Livro1
Abstração
● Agrupa classes similares como irmãs
● Diminui a complexidade de
implementação
● Não pode ser instanciada
Objeto
ƒx
ƒx
ƒx
ƒx
ƒx
ƒx
ƒx ƒx ƒx
X X
X X
X X
Classe abstrta
ƒx
ƒx
ƒx
ƒx
public abstract class TemplateImpostoCondicional implements
Imposto {
@Override
public double calcula(Orcamento orcamento) {
if(deveUsarMaximaTaxacao(orcamento)) return
maximaTaxacao(orcamento);
else return minimaTaxacao(orcamento);
}
protected abstract double minimaTaxacao(Orcamento
orcamento);
protected abstract double maximaTaxacao(Orcamento
orcamento);
protected abstract boolean
deveUsarMaximaTaxacao(Orcamento orcamento);
}
Classe Abstrata
Objeto
public class IKCV extends TemplateImpostoCondicional {
private boolean temItemMaiorQue100Reais(Orcamento
orcamento) {
for (Item item : orcamento.getItens()) {
if(item.getValor() > 100) return true;
}
return false;
}
@Override
public double minimaTaxacao(Orcamento orcamento) {
return orcamento.getValor() * 0.06;
}
@Override
public double maximaTaxacao(Orcamento orcamento) {
return orcamento.getValor() * 0.1;
}
@Override
public boolean deveUsarMaximaTaxacao(Orcamento
orcamento) {
return orcamento.getValor()> 500 &&
temItemMaiorQue100Reais(orcamento);
}
}
Encapsulamento x Abstração
1. Separar o código em unidades (objetos)
a. Conta, Agencia, Titular
b. Gerente, Funcionário, Cliente
2. Esconde atributos e métodos por razões
de segurança
1. Criar um “molde” que pode ser aplicado
com facilidade para classes semelhantes:
a. Livro(abstrata) -> Ebook, LivroFisico
2. Permite focar em quais informações um
objeto deve conter
Polimorfismo
● Reutilização
● Clareza
● Manutenção de código
public abstract class OperacaoMatematica {
public abstract double calcula(double x, double y);
}
public class Soma extends OperacaoMatematica {
@Override
public double calcula(double x, double y) {
return x+y;
}
}
public class Teste {
public static void main(String[] args) {
OperacaoMatematica soma = new Soma();
Soma soma2 = new Soma();
soma.calcula(5,7);
soma2.calcula(8,9);
OperacaoMatematica sub = new Subtracao();
sub.calcula(7,5);
}
}
Interface (protocolo)
Animal
Ave
Mamifero
CachorroCavaloPapagario
Baleia
AnimalEstimacaoAnimalDomesticado
Gato
Classe
Abstrata
Classe
Interface
public abstract class Animal {
private String nome;
public abstract String emitirSom();
public String getNome() { return nome; }
public void setNome(String nome) { this.nome =
nome; }
}
public abstract class Mamifero extends Animal {
private String especie;
public abstract void amamentar();
}
public abstract class Ave extends Animal {
public abstract void voar();
}
public interface AnimalDomesticado {
void levarVeterinario();
void alimentar();
}
public interface AnimalEstimacao {
void brincar();
void passear();
}
Todos os campos de interfaces são públicos, estáticos
e finais:
public static final int id = 2;
int id = 2;
public class Cachorro extends Mamifero implements
AnimalDomesticado, AnimalEstimacao {
@Override
public void levarVeterinario() { }
@Override
public void alimentar() { }
@Override
public void brincar() { }
@Override
public void passear() { }
@Override
public void amamentar() { }
@Override
public String emitirSom() { return "Au au"; }
}
public class Gato extends Mamifero implements
AnimalDomesticado, AnimalEstimacao{
@Override
public void levarVeterinario() { }
@Override
public void alimentar() { }
@Override
public void brincar() { }
@Override
public void passear() { }
@Override
public void amamentar() { }
@Override
public String emitirSom() { return "Miau"; }
}
public class Cavalo extends Mamifero implements
AnimalDomesticado {
@Override
public void levarVeterinario() { }
@Override
public void alimentar() { }
@Override
public void amamentar() { }
@Override
public String emitirSom() { return null; }
}
public class Papagaio extends Ave {
@Override
public void voar() {
}
@Override
public String emitirSom() {
return "Piupiu";
}
}
public class Baleia extends Mamifero {
@Override
public void amamentar() {
// Nada
}
@Override
public String emitirSom() {
return null;
}
}
Statics
● Métodos estáticos não precisam de
instâncias para serem chamados
● Constantes através de interfaces
public class Fibonnacci {
public static int calcula(int n) {
if (n < 2) return 1;
return calcula(n-1) + calcula(n-2);
}
}
public class Teste {
public static void main(String[] args) {
System.out.println(Constantes.PROJECT_NAME + ":");
for(int i = Constantes.I; i<Constantes.LIMITE; i++) {
System.out.println(Fibonnacci.calcula(i));
}
}
}
public interface Constantes {
int ANSWER = 42;
String PROJECT_NAME = "Fibonnacci Numbers";
int LIMITE = 15;
int I = 0;
}
● Atributos estáticos possuem o mesmo
valor, independente de quantos
objetos são instanciados

Mais conteúdo relacionado

Mais procurados

Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)JugVale
 
Spock Framework
Spock FrameworkSpock Framework
Spock FrameworkIsmael
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Wilson Júnior
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomNelson Glauber Leal
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismoMaurício Linhares
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2Ismael
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasRodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Jstdc-globalcode
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCJosé Travado
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2Wilson Júnior
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DPaulo Henrique Lerbach Rodrigues
 

Mais procurados (20)

Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Jug bizus
Jug   bizusJug   bizus
Jug bizus
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
servlet-respostas
servlet-respostasservlet-respostas
servlet-respostas
 
Spock Framework
Spock FrameworkSpock Framework
Spock Framework
 
Aprendendo ruby
Aprendendo rubyAprendendo ruby
Aprendendo ruby
 
Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)Go Lang para desenvolvedores pragmáticos (parte 1)
Go Lang para desenvolvedores pragmáticos (parte 1)
 
PHP e Mysql - DELETE
PHP e Mysql - DELETEPHP e Mysql - DELETE
PHP e Mysql - DELETE
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 
Spock Framework 2
Spock Framework 2Spock Framework 2
Spock Framework 2
 
Node.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo BranasNode.js - #4 - Timers - Rodrigo Branas
Node.js - #4 - Timers - Rodrigo Branas
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Implementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRCImplementação em ActionScript 3 do Protocolo IRC
Implementação em ActionScript 3 do Protocolo IRC
 
Golang para desenvolvedores pragmáticos parte 2
Golang para desenvolvedores pragmáticos  parte 2Golang para desenvolvedores pragmáticos  parte 2
Golang para desenvolvedores pragmáticos parte 2
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 

Semelhante a Git, GitHub e OO

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dadosHenrique Fernandes
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidiMasters
 
Inteligencia artificial 3
Inteligencia artificial 3Inteligencia artificial 3
Inteligencia artificial 3Nauber Gois
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHPDanilo Godoy
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnitelliando dias
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Caelum
 

Semelhante a Git, GitHub e OO (20)

Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Vraptor
VraptorVraptor
Vraptor
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Orientação a Objeto
Orientação a ObjetoOrientação a Objeto
Orientação a Objeto
 
Como conectar programas em linguagem java a bases de dados
Como conectar programas em linguagem java  a bases de dadosComo conectar programas em linguagem java  a bases de dados
Como conectar programas em linguagem java a bases de dados
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos Android
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Kotlin first
Kotlin firstKotlin first
Kotlin first
 
Inteligencia artificial 3
Inteligencia artificial 3Inteligencia artificial 3
Inteligencia artificial 3
 
Solid
SolidSolid
Solid
 
Injeção de Dependências com PHP
Injeção de Dependências com PHPInjeção de Dependências com PHP
Injeção de Dependências com PHP
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
Porque você deveria usar CDI nos seus projetos Java! - JavaOne LA 2012 - Sérg...
 
Desenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECLDesenvolvimento de Extensões PECL
Desenvolvimento de Extensões PECL
 
Git - Não perca o que estava funcionando!
Git - Não perca o que estava funcionando!Git - Não perca o que estava funcionando!
Git - Não perca o que estava funcionando!
 
Use CDI em seus projetos Java !
Use CDI em seus projetos Java !Use CDI em seus projetos Java !
Use CDI em seus projetos Java !
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 

Git, GitHub e OO

  • 2. Git - Controle de versões - Backup do código (segurança)
  • 3. Principais Comandos $ git init - Cria um repositório local $ git clone url - Clona um repositório remoto para uma pasta local $ git remote add <uri> - Adiciona um repositório remoto (não necessário caso tenha sido usado o clone) $ git add <files> - Adiciona ao index $ git commit -m “Message” - Commit dos arquivos do index $ git pull - Atualiza os arquivos locais baseados no repositório remoto $ git push origin master - Envia os arquivos para o repositório remoto, na branch master $ git checkout -b <branch> - Cria uma branch e troca para ela $ git merge <branch> - Faz o merge de uma branch para a outra
  • 4. GitHub - Plataforma de hospedagem - Compartilhamento de código - Contribuição para projetos OpenSource https://github.com/
  • 6. Procedural x OO OOP ● Objetos ● Campos e métodos ● Reaproveitamento de código ● Métodos com poucos parametros ● Controle de acesso Programção Procedural ● Lista de procedimentos ● Muitas variáveis ● Muito Copy+Paste ● Funções com muitos parâmetros ● Dificil manutenção let titular = "Douglas"; let cpf = 11122233345; let cc = 987654; let saldo = 500; function saca(saldo, valor) { return saldo - valor; } let conta = { titular: "Douglas", cpf: 11122233345, cc: 987654, saldo: 500, saca: function(valor) { return this.saldo - valor; } } ● Programação Procedural ● OOP
  • 8. Algumas práticas: - Information Hidding - Tell, don’t ask (Mande, não peça) - Programação voltada a interface - Lei de Demeter - Liskov Substitute Principle
  • 9. Modificadores de Acesso ● Segurança de código ● Responsabilidade única com o private Class Packag e 2 protected 1 public Subclass World 3 no-modifier 4 private
  • 10. Como saber se está bem encapsulado? NotaFiscal nf = new NotaFiscal(); double valor = nf.calculaValorImposto(); O que o método faz? Como ele faz? Encapsulamento
  • 11. Herança ● Um objeto adquire as propriedades e comportamentos da classe mãe ● Cria uma relação mãe-filho(parent- child) entre duas classes ● Mecanismo robusto e natural para organizar e estruturar softwares Livro Livro Fisico E-Book E-Bok2E-Book1Livro2Livro1
  • 12. Abstração ● Agrupa classes similares como irmãs ● Diminui a complexidade de implementação ● Não pode ser instanciada Objeto ƒx ƒx ƒx ƒx ƒx ƒx ƒx ƒx ƒx X X X X X X Classe abstrta ƒx ƒx ƒx ƒx
  • 13. public abstract class TemplateImpostoCondicional implements Imposto { @Override public double calcula(Orcamento orcamento) { if(deveUsarMaximaTaxacao(orcamento)) return maximaTaxacao(orcamento); else return minimaTaxacao(orcamento); } protected abstract double minimaTaxacao(Orcamento orcamento); protected abstract double maximaTaxacao(Orcamento orcamento); protected abstract boolean deveUsarMaximaTaxacao(Orcamento orcamento); } Classe Abstrata
  • 14. Objeto public class IKCV extends TemplateImpostoCondicional { private boolean temItemMaiorQue100Reais(Orcamento orcamento) { for (Item item : orcamento.getItens()) { if(item.getValor() > 100) return true; } return false; } @Override public double minimaTaxacao(Orcamento orcamento) { return orcamento.getValor() * 0.06; } @Override public double maximaTaxacao(Orcamento orcamento) { return orcamento.getValor() * 0.1; } @Override public boolean deveUsarMaximaTaxacao(Orcamento orcamento) { return orcamento.getValor()> 500 && temItemMaiorQue100Reais(orcamento); } }
  • 15. Encapsulamento x Abstração 1. Separar o código em unidades (objetos) a. Conta, Agencia, Titular b. Gerente, Funcionário, Cliente 2. Esconde atributos e métodos por razões de segurança 1. Criar um “molde” que pode ser aplicado com facilidade para classes semelhantes: a. Livro(abstrata) -> Ebook, LivroFisico 2. Permite focar em quais informações um objeto deve conter
  • 16. Polimorfismo ● Reutilização ● Clareza ● Manutenção de código public abstract class OperacaoMatematica { public abstract double calcula(double x, double y); } public class Soma extends OperacaoMatematica { @Override public double calcula(double x, double y) { return x+y; } } public class Teste { public static void main(String[] args) { OperacaoMatematica soma = new Soma(); Soma soma2 = new Soma(); soma.calcula(5,7); soma2.calcula(8,9); OperacaoMatematica sub = new Subtracao(); sub.calcula(7,5); } }
  • 18. public abstract class Animal { private String nome; public abstract String emitirSom(); public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } } public abstract class Mamifero extends Animal { private String especie; public abstract void amamentar(); } public abstract class Ave extends Animal { public abstract void voar(); }
  • 19. public interface AnimalDomesticado { void levarVeterinario(); void alimentar(); } public interface AnimalEstimacao { void brincar(); void passear(); } Todos os campos de interfaces são públicos, estáticos e finais: public static final int id = 2; int id = 2;
  • 20. public class Cachorro extends Mamifero implements AnimalDomesticado, AnimalEstimacao { @Override public void levarVeterinario() { } @Override public void alimentar() { } @Override public void brincar() { } @Override public void passear() { } @Override public void amamentar() { } @Override public String emitirSom() { return "Au au"; } } public class Gato extends Mamifero implements AnimalDomesticado, AnimalEstimacao{ @Override public void levarVeterinario() { } @Override public void alimentar() { } @Override public void brincar() { } @Override public void passear() { } @Override public void amamentar() { } @Override public String emitirSom() { return "Miau"; } }
  • 21. public class Cavalo extends Mamifero implements AnimalDomesticado { @Override public void levarVeterinario() { } @Override public void alimentar() { } @Override public void amamentar() { } @Override public String emitirSom() { return null; } } public class Papagaio extends Ave { @Override public void voar() { } @Override public String emitirSom() { return "Piupiu"; } } public class Baleia extends Mamifero { @Override public void amamentar() { // Nada } @Override public String emitirSom() { return null; } }
  • 22. Statics ● Métodos estáticos não precisam de instâncias para serem chamados ● Constantes através de interfaces public class Fibonnacci { public static int calcula(int n) { if (n < 2) return 1; return calcula(n-1) + calcula(n-2); } } public class Teste { public static void main(String[] args) { System.out.println(Constantes.PROJECT_NAME + ":"); for(int i = Constantes.I; i<Constantes.LIMITE; i++) { System.out.println(Fibonnacci.calcula(i)); } } } public interface Constantes { int ANSWER = 42; String PROJECT_NAME = "Fibonnacci Numbers"; int LIMITE = 15; int I = 0; } ● Atributos estáticos possuem o mesmo valor, independente de quantos objetos são instanciados

Notas do Editor

  1. Backup: Ter varias versões antigas do código disponivel para consulta
  2. Outras plataformas: BitBuket e GitLab RedeSocial - Perfis e atividades Fork e pull-request
  3. Kevlin Henney - “É possivel programar OO em Java”, 2011 “Bons objetos seriam pessimas pessoas: ignorantes, apaticos e egoistas” Ignorantes = Só sabem nada além do mundo deles Apatico = o que os outros fazem, nao impacta nele Egoista = Não se importa com os outros
  4. Jornaleiro - getValor() -> Fazer if-else e calcular imposto / calculaValorImposto() Programação voltada a interface: O que o objeto faz e não como O jornaleiro pega o dinheiro e entrega o jornal Não: passo a passo A implementação deve estar escondida. Não importa se ele imprime na hora ou já traz impresso “Um objeto deve chamar somente metodos de si mesmo ou parametros passados a ele” - pessoa.getCep().getEndereco().getRua() (alto acoplamento -> Train Wreck) Liskov -> Pré-MaisRestritas e Pós-MaisFrouxas (Quadrado extends Retangulo)
  5. Segurança = Não é todo mundo que mexe em todos os atributos (Information Hidding) Responsabilidade unica = só uma classe pode mexer no atributo, então ela é responsavel por tudo o que envolve esse atributo
  6. Esconder os metodos e atributos de uma classe getCódigoDeBarras -> Sem setCB
  7. Relação mae-filho = LivroFisico vem de Filho
  8. Diminui complexidade = uso de design patterns
  9. Clareza = Facilita leitura Manutenção = Impressora(OperaçãoMatematica) - Só preciso ter uma
  10. Como um contrato Diferenças entre Interface e Abstrata Metodos em interfaces nao podem ter implementação “Posso ser só mamifero OU ave, nunca os dois” - Exceto ornintorrinco