Skip to content

Commit

Permalink
feat (example/static): refinement of the example
Browse files Browse the repository at this point in the history
  • Loading branch information
santanche committed Apr 20, 2021
1 parent c5f19f2 commit ac0e683
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 46 deletions.
213 changes: 173 additions & 40 deletions notebooks/pt/c02oo-java/s05estatico/s01tarefa/estatica-chat.ipynb
Original file line number Diff line number Diff line change
@@ -1,36 +1,162 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Atributos e Métodos de Instância\n",
"\n",
"Vamos retomar como funcionam os atributos e métodos da forma vista até agora. Considere a seguinte classe que mantém um contador:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkrf8e68ad4.RegistroI"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class RegistroI {\n",
" int contador;\n",
" \n",
" int proximoContador() {\n",
" contador++;\n",
" return contador;\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Para que se possa usar o atributo e/ou o método é necessária a criação prévia de uma instância e o atributo e/ou método são acessados através dela:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Contador: 5\n",
"Contador: 6\n"
]
},
{
"data": {
"text/plain": [
"null"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RegistroI r = new RegistroI();\n",
"r.contador = 5;\n",
"System.out.println(\"Contador: \" + r.contador);\n",
"System.out.println(\"Contador: \" + r.proximoContador());"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Um atributo novo é criado para cada nova instância, de tal forma que cada instância mantém seu estado de forma independente. O método sempre se refere ao atributo da sua instância:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Contador r1: 5\n",
"Contador r2: 7\n",
"Contador r1: 6\n",
"Contador r2: 8\n"
]
},
{
"data": {
"text/plain": [
"null"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"RegistroI r1 = new RegistroI(),\n",
" r2 = new RegistroI();\n",
"r1.contador = 5;\n",
"r2.contador = 7;\n",
"\n",
"System.out.println(\"Contador r1: \" + r1.contador);\n",
"System.out.println(\"Contador r2: \" + r2.contador);\n",
"System.out.println(\"Contador r1: \" + r1.proximoContador());\n",
"System.out.println(\"Contador r2: \" + r2.proximoContador());"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Esses atributos e métodos “pertencem” à instância."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Atributos e Métodos Estáticos\n",
"\n",
"Atributos e métodos que pertencem à classe e não precisam de instâncias para serem usados/acionados. Precedidos da cláusula `static`.\n",
"Atributos e métodos que pertencem à classe e não precisam de instâncias para serem usados/acionados. Eles são precedidos da cláusula `static`.\n",
"\n",
"## Classe `Registro`\n",
"\n",
"Veja exemplo da classe `Registro` que define um atributo e um método estáticos. Métodos estáticos só podem se referir a atributos estáticos."
"Veja exemplo da classe `RegistroS` que define um atributo e um método estáticos. Métodos estáticos só podem se referir a atributos estáticos."
]
},
{
"cell_type": "code",
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkr025200b4.Registro"
"com.twosigma.beaker.javash.bkrf8e68ad4.RegistroS"
]
},
"execution_count": 1,
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"public class Registro {\n",
"public class RegistroS {\n",
" static int contador = 0;\n",
" \n",
" static int proximoContador() {\n",
Expand All @@ -46,12 +172,12 @@
"source": [
"## Usando um atributo estático\n",
"\n",
"Precedido apenas pelo nome da classe. Dispensa a criação de instância (objeto)."
"Há duas formas de se usar um atributo estático. A primeira é precedida apenas pelo nome da classe. Dispensa a criação de instância (objeto):"
]
},
{
"cell_type": "code",
"execution_count": 2,
"execution_count": 5,
"metadata": {},
"outputs": [
{
Expand All @@ -67,14 +193,14 @@
"null"
]
},
"execution_count": 2,
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Registro.contador = 5;\n",
"System.out.println(\"Contador: \" + Registro.contador);"
"RegistroS.contador = 5;\n",
"System.out.println(\"Contador: \" + RegistroS.contador);"
]
},
{
Expand All @@ -83,12 +209,12 @@
"source": [
"## Usando um Método Estático\n",
"\n",
"Também precedido do nome da classe. Tal como o atributo, dispensa a criação de instância."
"Também há duas maneiras de se usar métodos estáticos e a primeira é precedendo-o do nome da classe. Tal como o atributo, dispensa a criação de instância:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"execution_count": 6,
"metadata": {},
"outputs": [
{
Expand All @@ -104,13 +230,13 @@
"null"
]
},
"execution_count": 3,
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"System.out.println(\"Contador: \" + Registro.proximoContador());"
"System.out.println(\"Contador: \" + RegistroS.proximoContador());"
]
},
{
Expand All @@ -119,12 +245,12 @@
"source": [
"## Atributos e Métodos Estáticos em Instâncias\n",
"\n",
"É possível o acesso a atributos e métodos estáticos a partir dos ponteiros para as instâncias, mas eles continuam se comportando como estáticos, ou seja, pertencente à classe e não a objetos específicos."
"É possível o acesso a atributos e métodos estáticos a partir dos ponteiros para as instâncias, mas eles continuam se comportando como estáticos, ou seja, pertencem à classe e não a objetos específicos. Portanto, o mesmo atributo e seu valor é compartilhado por todos os objetos. Compare o comportamento deste código com o apresentado anteriormente para atributos/métodos de instância:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"execution_count": 7,
"metadata": {},
"outputs": [
{
Expand All @@ -143,14 +269,14 @@
"null"
]
},
"execution_count": 4,
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Registro r1 = new Registro(),\n",
" r2 = new Registro();\n",
"RegistroS r1 = new RegistroS(),\n",
" r2 = new RegistroS();\n",
"r1.contador = 5;\n",
"r2.contador = 7;\n",
"\n",
Expand All @@ -171,16 +297,16 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkr025200b4.Chat"
"com.twosigma.beaker.javash.bkrf8e68ad4.Chat"
]
},
"execution_count": 5,
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
Expand Down Expand Up @@ -223,7 +349,7 @@
},
{
"cell_type": "code",
"execution_count": 6,
"execution_count": 9,
"metadata": {},
"outputs": [
{
Expand All @@ -243,7 +369,7 @@
"null"
]
},
"execution_count": 6,
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -268,21 +394,21 @@
"\n",
"## Nova classe `Grafico`\n",
"\n",
"Retomando a classe `Grafico` feita anteriormente (copiada abaixo), modifique classe para que só haja um caractere que seja compartilhado por todos os objetos, em vez cada instância ter seu caractere."
"Retomando a classe `Grafico` feita anteriormente (copiada abaixo), modifique classe para que só haja um caractere que seja compartilhado por todos os objetos, em vez de cada instância ter o seu próprio caractere."
]
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"com.twosigma.beaker.javash.bkr025200b4.Grafico"
"com.twosigma.beaker.javash.bkrf8e68ad4.Grafico"
]
},
"execution_count": 7,
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -307,14 +433,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 11,
"metadata": {},
"outputs": [
{
Expand All @@ -336,7 +455,7 @@
"null"
]
},
"execution_count": 8,
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
Expand All @@ -360,7 +479,21 @@
"source": [
"## Aplicação para a Nova Classe `Grafico`\n",
"\n",
"Escreva um código para testar a sua classe."
"Sua nova classe `Grafico`:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Escreva um código para testar a sua classe:"
]
},
{
Expand All @@ -383,7 +516,7 @@
"mimetype": "",
"name": "Java",
"nbconverter_exporter": "",
"version": "11.0.6"
"version": "1.8.0_121"
}
},
"nbformat": 4,
Expand Down
12 changes: 12 additions & 0 deletions src/java/src/pt/c02oo/s04estatica/s00registro/AppAInstance.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package pt.c02oo.s04estatica.s00registro;

public class AppAInstance {
public static void main(String args[]) {
RegistroI r = new RegistroI();

r.contador = 5;

System.out.println("Contador: " + r.contador);
System.out.println("Contador: " + r.proximoContador());
}
}
Loading

0 comments on commit ac0e683

Please sign in to comment.