SlideShare uma empresa Scribd logo
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

ODP
Palestra2009
ODP
Dependency injection
KEY
Design de código: princípios e práticas para ter um código sustentável
PDF
Doctrine2 Seminário PHP
ODP
Palestra cbq
PDF
Acessando o MySql com o Python
PPT
Apostia de Jogos com Java
PDF
Curso de Node JS Básico
Palestra2009
Dependency injection
Design de código: princípios e práticas para ter um código sustentável
Doctrine2 Seminário PHP
Palestra cbq
Acessando o MySql com o Python
Apostia de Jogos com Java
Curso de Node JS Básico

Mais procurados (20)

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

Semelhante a Git, GitHub e OO (20)

PPTX
Semana 1 Technocorp
PDF
Curso java 05 - herança, classes e métodos abstratos
PPTX
Estudos Technocorp
PPTX
Java - Visão geral e Exercícios
DOCX
PPTX
Estudos Technocorp
PPSX
Java & orientação a objetos
PPTX
Semana um
PDF
PPTX
Java: Introdução à Orientação a Objetos
PDF
Programação Orientada a Objetos com Java
PDF
PPTX
Programação Orientado a Objetos
PDF
Orientação a objetos php
PDF
Combatendo code smells em aplicações Java
PPT
Java aula 2
PDF
Revisão Sobre Programação Orientada a Objetos com Java
PDF
Polimorfismo em java
PDF
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
Semana 1 Technocorp
Curso java 05 - herança, classes e métodos abstratos
Estudos Technocorp
Java - Visão geral e Exercícios
Estudos Technocorp
Java & orientação a objetos
Semana um
Java: Introdução à Orientação a Objetos
Programação Orientada a Objetos com Java
Programação Orientado a Objetos
Orientação a objetos php
Combatendo code smells em aplicações Java
Java aula 2
Revisão Sobre Programação Orientada a Objetos com Java
Polimorfismo em java
Programação Orientada a Objetos - Pós Graduação - Aula 6 - Princípios OO
Curso de OO com C# - Parte 01 - Orientação a objetos
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
PPTX
Mapeamento de Objeto para Tabela Relacional
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
apresentacao introducao computacao ead.pdf
Mapeamento de Objeto para Tabela Relacional
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Curso de Windows 11 resumido na prática.pptx
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO

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

  • #3: Backup: Ter varias versões antigas do código disponivel para consulta
  • #5: Outras plataformas: BitBuket e GitLab RedeSocial - Perfis e atividades Fork e pull-request
  • #7: 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
  • #9: 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)
  • #10: 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
  • #11: Esconder os metodos e atributos de uma classe getCódigoDeBarras -> Sem setCB
  • #12: Relação mae-filho = LivroFisico vem de Filho
  • #13: Diminui complexidade = uso de design patterns
  • #17: Clareza = Facilita leitura Manutenção = Impressora(OperaçãoMatematica) - Só preciso ter uma
  • #18: 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