The 7 Things I Know About Cyber Security After 25 Years | April 2024
Plataforma e Lingaguem Java + Swing
1. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 1/90
Plataforma e Linguagem Java +Swing
16 horas de explanação, diálogo e prática
Julho 2016
por Luiz Henrique Rauber Rodrigues
luizrauber@gmail.com - fb.com/luizrauber
Exceto onde tiver outra referência, este é material é Creative Commons com Atribuição-CompartilhaIgual (CC
BY-SA). Pode copiar, alterar e redistribuir à vontade, mesmo para fins comerciais, mas desde que me cite e
licenciem as novas criações sob termos idênticos. Like Free Software :)
2. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 2/90
.NET e C#
16 horas de explanação, diálogo e prática
Junho 2016
por Luiz Henrique Rauber Rodrigues
luizrauber@gmail.com - fb.com/luizrauber
3. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 3/90
Mas primeiro….
Conselhos Richard Feynman (1918-1988), Nobel de Física em 1965
2 tipos de sabedoria: “Saber o nome de algo” e o “Saber algo”
1) Escolha um conceito; tema ou objetivo do que quer saber
2) Escreva-o como se estivesse ensinando uma criança; nada subentendido
3) Volte no tema e pesquise sobre ele; especifique o 1-2 da forma 2)
4) Revise e simplifique ainda mais; sem jargões e sabendo usar analogias
http://www.bbc.com/portuguese/geral-36750825
4. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 4/90
Manifesto para o desenvolvimento ágil de software
Estamos descobrindo maneiras melhores de desenvolver software fazendo-o
nós mesmos e ajudando outros a fazê-lo. Através deste trabalho, passamos a
valorizar:
Indivíduos e interação entre eles mais que processos e ferramentas
Software em funcionamento mais que documentação abrangente
Colaboração com o cliente mais que negociação de contratos
Responder a mudanças mais que seguir um plano
Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à
esquerda.
http://www.manifestoagil.com.br/
6. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 6/90
Java é framework (ou plataform) que tem
outros frameworks, e também é linguagem!
7. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 7/90
Patrick Naughton, Mike Sheridan, e James
Gosling trabalhavam no The Green Project,
da Sun Microsystems, um projeto em 1991
pensando num pré-futuro de interligação de
coisas, algo que em 2016 chamamos de IoT
– Internet of Things.
8. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 8/90
Entre as criações, que era objetivo do
projeto, saiu o *7 (StarSeven), um controle
remoto touchscreem, e para tal funcionar a
equipe criou uma linguagem de
programação batizada de oak. (nome em
inglês para o que chamamos de carvalho (que alias, é
nativo de lá) só não se sabe de qual das mais de 600
espécies desta Quercus da Fagaceae.
11. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 11/90
*7 falhou, mas tinham os pequenos
aplicativos, que migraram pra web, e os
applets falharam, mas ficou o Java!
Sun Microsystems – James Gosling – 1995
12. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 12/90
Linguagem Java foi feita para a plataforma
Java “Write Once, Run Anywhere – WORA”
13. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 13/90
“Since 1995, Java has changed our
world . . . and our expectations..”
http://www.oracle.com/technetwork/java/jav
ase/overview/javahistory-index-
198355.html
14. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 14/90
Linguagem Java sobre GPL – 13/11/2006
JDK sobre GPL – 08/05/2007
15. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 15/90
OO – altamente tipada, tudo é baseado em
objetos (Object Model)
16. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 16/90
Interpretado – Fonte pra bytecode por
compilação e bytecode pra SO Just-In-Time
17. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 17/90
Multi-plataforma e Multi-arquitetura e
Portável – Bytecode compilado pra JVM ou
web
18. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 18/90
Segurança – encriptação por chave
pública (assimétrica), dificulta virus,
falsificação.
19. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 19/90
Robustez – verificação de erro e tempo de
execução em “tempo de compilação”
20. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 20/90
Multi-thread – feature para desenvolvedor
poder programar com recurso multi task
21. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 21/90
Local/ distribuído, dinâmico – roda aplicação
isolada ou na internet, ou sobre ela, run-
time
31. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 31/90
Java + Alice: Turning abstraction into
animation.
http://java.com/en/java_in_action/alice.jsp
32. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 32/90
Java Magazine
Java Community News and Events/ 'Java
in Action' (Java application stories)/ Java
Architecture/ New to Java/ Enterprise Java
Programming/ Polyglot Programming/ Rich
Client/Web Development/ Mobile and
Embedded Development
http://java.com/en/about/javamagazine.jsp
33. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 33/90
Oracle Java
http://www.oracle.com/technetwork/java/index.htm
l
36. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 36/90
Java 8 (1.8)
http://docs.oracle.com/javase/8/
Diagrama Interativo
http://docs.oracle.com/javase/8/docs/index.html
37. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 37/90
http://www.oracle.com/technetwork/java/javaee/documentation
/index.html
JSR 366 - Java EE 8
JSR 367 - The Java API for JSON Binding
JSR 368 - Java Message Service 2.1
JSR 369 - Java Servlet 4.0
JSR 370 - Java API for RESTful Web Services 2.1
JSR 371 - Model-View-Controller 1.0
JSR 372 - Java Server Faces 2.3
JSR 373 - Java EE Management API 1.0
JSR 374 - Java API for JSON Processing 1.1
JSR 375 - Java EE Security API 1.0
38. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 38/90
http://www.oracle.com/technetwork/java/embedded/javame/in
dex.html
Java ME Embedded
Java for Mobile
Java TV
http://www.oracle.com/technetwork/java/embedded/javacard/o
verview/index.html
39. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 39/90
Para programar
Lógica + OO (Objetos/
Atributos(Instâncias)/ Classes/ Métodos) +
JDK + IDE
40. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 40/90
Para programar
Linguagem Java é Case Sensitive
Nome da classe main será o nome do
programa
41. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 41/90
Para programar
Umas boas práticas
NomeDaClasse
nomeDoMetodo
Variavel, variavel, $variavel, _variavel
podem ser locais ou globais
/* comentários também assim // */
42. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 42/90
Para programar
.java → javac → .class → javap → .java
java nomedoprograma executa,
javap mostra detalhes do fonte
43. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 43/90
public class MyFirstJavaProgram{
/* This is my first java program.
* This will print 'Hello World' as the output
*/
public static void main(String[]args){
System.out.println("Hello World");// prints Hello World
}
}
Hello World!
C :> javac MyFirstJavaProgram.java
C :> java MyFirstJavaProgram
HelloWorld
Tutorialspoint, 2015
45. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 45/90
public class Dog{
String breed;
int age;
String color;
void barking(){
}
void hungry(){
}
void sleeping(){
}
}
Tutorialspoint, 2015
46. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 46/90
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// This constructor has one parameter, name.
}
}
Tutorialspoint, 2015
47. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 47/90
public class Puppy{
public Puppy(String name){
System.out.println("Passed Name is :"+ name );
}
public static void main(String[] args){
Puppy myPuppy =new Puppy("tommy");
}
}
PassedNameis:tommy
48. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 48/90
public class Puppy{
int puppyAge;
public Puppy(String name){
System.out.println("Passed Name is
:"+ name );
}
public void setAge(int age ){
puppyAge = age;
}
public int getAge(){
System.out.println("Puppy's age
is :"+ puppyAge );
return puppyAge;
PassedName is:tommy
Puppy's age is :2
Variable Value :2
public static void main(String[]args){
Puppy myPuppy =new
Puppy("tommy");
myPuppy.setAge(2);
myPuppy.getAge();
System.out.println("Variable
Value :"+ myPuppy.puppyAge );
}
}
49. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 49/90
import java.util.Scanner;
public class Entrada {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
String printar;
System.out.print("Printa o escrito pelo usuario ");
printar = entrada.nextLine(); //nextFloat, nextInt
System.out.println("Digitado: " +printar+ " !");
}
}
50. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 50/90public class Employee{
String name;
int age;
String designation;
double salary;
public Employee(String name){
this.name = name;
}
public void empAge(int empAge){
age = empAge;
}
public void empDesignation(String empDesig){
designation = empDesig;
}
public void empSalary(double empSalary){
salary = empSalary;
}
public void printEmployee(){
System.out.println("Name:"+ name );
System.out.println("Age:"+ age );
System.out.println("Designation:"+ designation );
System.out.println("Salary:"+ salary);
}
}
Age: 26
Designation:SeniorSoftwareEngineer
Salary: 1000.0
Name:MaryAnne
Age: 21
Designation:SoftwareEngineer
Salary: 500.0
public static void main(String args[]){
Employee empOne =new Employee("James Smith");
Employee empTwo =new Employee("Mary Anne");
empOne.empAge( 26 );
empOne.empDesignation("Senior Software
Engineer");
empOne.empSalary( 1000 );
empOne.printEmployee();
empTwo.empAge( 21 );
empTwo.empDesignation("Software Engineer");
empTwo.empSalary( 500 );
empTwo.printEmployee();
}
}
51. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 51/90public class Employee{
String name;
int age;
String designation;
double salary;
public Employee(String name){
this.name = name;
}
public void empAge(int empAge){
age = empAge;
}
public void empDesignation(String empDesig){
designation = empDesig;
}
public void empSalary(double empSalary){
salary = empSalary;
}
public void printEmployee(){
System.out.println("Name:"+ name );
System.out.println("Age:"+ age );
System.out.println("Designation:"+ designation );
System.out.println("Salary:"+ salary);
}
}
Age: 26
Designation:SeniorSoftwareEngineer
Salary: 1000.0
Name:MaryAnne
Age: 21
Designation:SoftwareEngineer
Salary: 500.0
public class EmployeeTest{
}
public staticvoid main(String args[]){
Employee empOne =new Employee("James Smith");
Employee empTwo =new Employee("Mary Anne");
empOne.empAge( 26 );
empOne.empDesignation("Senior Software
Engineer");
empOne.empSalary( 1000 );
empOne.printEmployee();
empTwo.empAge( 21 );
empTwo.empDesignation("Software Engineer");
empTwo.empSalary( 500 );
empTwo.printEmployee();
}
}
52. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 52/90public class Employee{
String name;
int age;
String designation;
double salary;
public Employee(String name){
this.name = name;
}
public void empAge(int empAge){
age = empAge;
}
public void empDesignation(String empDesig){
designation = empDesig;
}
public void empSalary(double empSalary){
salary = empSalary;
}
public void printEmployee(){
System.out.println("Name:"+ name );
System.out.println("Age:"+ age );
System.out.println("Designation:"+ designation );
System.out.println("Salary:"+ salary);
}
}
Age: 26
Designation:SeniorSoftwareEngineer
Salary: 1000.0
Name:MaryAnne
Age: 21
Designation:SoftwareEngineer
Salary: 500.0
public class EmployeeTest{
public staticvoid main(String args[]){
Employee empOne =new Employee("James Smith");
Employee empTwo =new Employee("Mary Anne");
empOne.empAge( 26 );
empOne.empDesignation("Senior Software
Engineer");
empOne.empSalary( 1000 );
empOne.printEmployee();
empTwo.empAge( 21 );
empTwo.empDesignation("Software Engineer");
empTwo.empSalary( 500 );
empTwo.printEmployee();
}
}
53. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 53/90
Employee.java contendo main na mesma classe
Employee.java contendo uma classe EmployeeTest
Employee.java sem main então a EmployeeTest.java é principal
Atenção ao encapsulamento e aos modificadores :)
default, public, protected, private
Tutorialspoint, 2015
54. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 54/90
• Métodos declarados público em uma superclasse também devem
ser públicos em todas as subclasses.
• Métodos declarada protegida em uma superclasse ou deve ser
protegido ou público em subclasses; eles não podem ser
Privado.
• Métodos declarados, sem controlo de acesso (nenhum
modificador foi usado) pode ser declarado mais privado em
subclasses.
• Métodos declarados privado não são herdadas em tudo, então
não há nenhuma regra para eles.
Tutorialspoint, 2015
55. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 55/90
Resumo modificadores de acesso
• default - Visível para o pacote. Sem modificadores necessários.
• private - Visível só para a classe.
• public - Visível para o mundo.
• protected - Visível para o pacote e todas as subclasses.
Tutorialspoint, 2015
56. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 56/90
Resumo não modificadores de acesso
• O modificador static é para a criação de métodos e variáveis de
classe
● O modificador final é para finalizar as implementações de
classes, métodos e variáveis.
● O modificador abstract é para criar classes e métodos abstratos.
● Os synchronized e volatile são usados para threads.
Tutorialspoint Java, 2015
59. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 59/90
public class Test{
public static void main(String args[]){
int x =10;
if( x <20){
System.out.print("This is if statement");
}
}
}
This is if statement
Tutorialspoint Java, 2015
60. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 60/90
public class Test{
public static void main(String args[]){
int x =30;
int y =10;
if( x ==30){
if( y ==10){
System.out.print("X = 30 and Y = 10");
}
}
}
}
X = 30 and Y = 10
Tutorialspoint Java, 2015
61. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 61/90
public class Test{
public static void main(String args[]){
int x =30;
if(x <20){
System.out.print("This is if statement");
}else{
System.out.print("This is else statement");
}
}
}
Thisiselse statement
Tutorialspoint Java, 2015
62. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 62/90
public class Test{
public static void main(String args[]){
int x =30;
if( x ==10){
System.out.print("Value of X is 10");
}elseif( x ==20){
System.out.print("Value of X is 20");
}elseif( x ==30){
System.out.print("Value of X is 30");
}else{
System.out.print("This is else statement");
}
}
} Value of X is30
Tutorialspoint Java, 2015
63. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 63/90
public class Test{
public static void main(String args[]){
char grade = args[0].charAt(0);
switch(grade) {
case'A': System.out.println("Excellent!"); break;
case'B':
case'C': System.out.println("Well done"); break;
case'D': System.out.println("You passed"); break;
Case'F': System.out.println("Better try again"); break;
default: System.out.println("Invalid grade"); break
}
System.out.println("Your grade is "+ grade);
}
}
Your grade is A
Excellent!
Tutorialspoint Java, 2015
64. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 64/90
public class Test{
public static void main(String args[]){
int x =10;
while( x <20){
System.out.print("value of x : "+ x );
x++;
System.out.print("n");
}
}
}
value of x :10
…
value of x :19
Tutorialspoint Java, 2015
65. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 65/90
public class Test{
public static void main(String args[]){
int x =10;
do{
System.out.print("value of x : "+ x );
x++;
System.out.print("n");
}while( x <20);
}
} value of x :10
…
value of x :19
Tutorialspoint Java, 2015
66. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 66/90
public class Test{
public static void main(String args[]){
for(int x =10; x <20; x = x+1){
System.out.print("value of x : "+ x );
System.out.print("n");
}
}
}
value of x :10
…
value of x :19
Tutorialspoint Java, 2015
67. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 67/90
public class Test{
public static void main(String args[]){
int[] numbers ={10,20,30,40,50};
for(int x : numbers){
System.out.print( x );
}
}
}
1020304050
Tutorialspoint Java, 2015
70. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 70/90
public class Test{
public static void main(String args[]){
int[] numbers ={10,20,30,40,50};
for(int x : numbers){
if(x ==30){
break;
}
System.out.print( x );
System.out.print("n");
}
}
}
10
20
Tutorialspoint Java, 2015
71. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 71/90
public class Test{
public static void main(String args[]){
int[] numbers ={10,20,30,40,50};
for(int x : numbers){
if( x ==30){
continue;
}
System.out.print( x );
System.out.print("n");
}
}
}
10
20
40
50Tutorialspoint Java, 2015
72. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 72/90
public class TestArray{
public static void main(String[] args){
double[] myList ={1.9,2.9,3.4,3.5};
for(double element: myList){
System.out.println(element);
}
}
}
1.9
2.9
3.4
3.5Tutorialspoint Java, 2015
73. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 73/90
public class Test{
public static void main(String args[]){
int[] numbers ={10,20,30,40,50};
for(int x : numbers ){
System.out.print(x);
System.out.print(",");
}
System.out.print("n");
String[] names ={"James","Larry","Tom","Lacy"};
for(String name : names ){
System.out.print( name );
System.out.print(",");
}
}
}
10,20,30,40,50,
James,Larry,Tom,Lacy,
Tutorialspoint Java, 2015
74. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 74/90
public class TestArray{
public static void main(String[] args){
double[] myList ={1.9,2.9,3.4,3.5};
for(int i =0; i < myList.length; i++){
System.out.println(myList[i]+" ");
}
double total =0;
for(int i =0; i < myList.length; i++){
total += myList[i];
}
System.out.println("Total is "+ total);
double max = myList[0];
for(int i =1; i < myList.length; i++){
if(myList[i]> max) max = myList[i];
}
System.out.println("Max is "+ max);
}
}
1.9
2.9
3.4
3.5
Totalis11.7
Maxis3.5
Tutorialspoint Java, 2015
75. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 75/90
public static void printArray(int[] array){
for(int i =0; i < array.length; i++){
System.out.print(array[i]+" ");
}
}
objeto.printArray(newint[]{3,1,2,6,4,2});
public static int[] reverse(int[] list){
int[] result =new int[list.length];
for(int i =0, j = result.length -1; i < list.length; i++, j--){
result[j]= list[i];
}
return result;
}
Tutorialspoint Java, 2015
76. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 76/90
public class Test{
public static void main(String args[]){
Integer x =5;
System.out.println( x.byteValue());
System.out.println(x.doubleValue());
System.out.println( x.longValue());
}
}
5
5.0
5Tutorialspoint Java, 2015
78. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 78/90
public class StringDemo{
public static void main(String args[]){
String string1 ="saw I was ";
System.out.println("Dot "+ string1 +"Tod");
}
}
Dot saw I was Tod
Tutorialspoint Java, 2015
79. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 79/90
public class StringDemo{
public static void main(String args[]){
char[] helloArray ={'h','e','l','l','o','.'};
String helloString =new String(helloArray);
System.out.println(helloString);
}
}
hello.
Tutorialspoint Java, 2015
80. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 80/90
int compareTo(Object o)
int compareTo(String anotherString)
String concat(String str)
static String copyValueOf(char[] data)
int length()
String toUpperCase()
…
Pag 105-156
.
Tutorialspoint Java, 2015
81. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 81/90
Class FreshJuice{
enum FreshJuiceSize{ SMALL, MEDUIM, LARGE }
FreshJuiceSize size;
public static void main(String args[]){
FreshJuice juice =new FreshJuice();
juice.size =FreshJuice.FreshJuiceSize.MEDUIM;
System.out.println("Tamanho do Suco:" +juice.size);
}
}
Tamanho do Suco: MEDIUM
Tutorialspoint Java, 2015
82. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 82/90
public class Employee{
private static double salary;
public static final String DEPARTMENT = "Development ";
public static void main(String args[]){
salary = 1000;
System.out.println(DEPARTMENT+"average salary:"+salary);
}
}
Development average salary:1000
Tutorialspoint Java, 2015
83. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 83/90
public class Animal{
}
public class Mammal extends Animal{
}
public class Reptile extends Animal{
}
public class Dog extends Mammal{
}
Tutorialspoint Java, 2015
84. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 84/90
public class Dog extends Mammal{
public static void main(String args[]){
Animal a =new Animal();
Mammal m =new Mammal();
Dog d =new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
} true
true
trueTutorialspoint Java, 2015
85. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 85/90
public interface Animal{}
public class Mammal implements Animal{
}
public class Dog extends Mammal{
}
Tutorialspoint Java, 2015
86. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 86/90
Interface Animal{}
class Mammal implements Animal{}
public class Dog extends Mammal{
public static void main(String args[]){
Mammal m =new Mammal();
Dog d =new Dog();
System.out.println(m instanceof Animal);
System.out.println(d instanceof Mammal);
System.out.println(d instanceof Animal);
}
}
true
true
trueTutorialspoint Java, 2015
87. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 87/90
Abrir o Netbeans
Olhar pra ele, ignorar e abrir um “Word”
e criar um projeto pra premissas de
Gerenciamento de Projeto
(recomendo Plan. GP com TA e Riscos)
:)
88. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 88/90
Agora sim
Criar o Projeto
Desenvolver a aplicação
Discutirmos os resultados