diff --git a/notebooks/pt/c02oo-java/s05estatico/s01tarefa/estatica-chat.ipynb b/notebooks/pt/c02oo-java/s05estatico/s01tarefa/estatica-chat.ipynb index 8c8c0cc..41f5987 100644 --- a/notebooks/pt/c02oo-java/s05estatico/s01tarefa/estatica-chat.ipynb +++ b/notebooks/pt/c02oo-java/s05estatico/s01tarefa/estatica-chat.ipynb @@ -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", @@ -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": [ { @@ -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);" ] }, { @@ -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": [ { @@ -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());" ] }, { @@ -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": [ { @@ -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", @@ -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" } @@ -223,7 +349,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -243,7 +369,7 @@ "null" ] }, - "execution_count": 6, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -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" } @@ -307,14 +433,7 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -336,7 +455,7 @@ "null" ] }, - "execution_count": 8, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -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:" ] }, { @@ -383,7 +516,7 @@ "mimetype": "", "name": "Java", "nbconverter_exporter": "", - "version": "11.0.6" + "version": "1.8.0_121" } }, "nbformat": 4, diff --git a/src/java/src/pt/c02oo/s04estatica/s00registro/AppAInstance.java b/src/java/src/pt/c02oo/s04estatica/s00registro/AppAInstance.java new file mode 100644 index 0000000..355bb99 --- /dev/null +++ b/src/java/src/pt/c02oo/s04estatica/s00registro/AppAInstance.java @@ -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()); + } +} diff --git a/src/java/src/pt/c02oo/s04estatica/s00registro/AppBInstance.java b/src/java/src/pt/c02oo/s04estatica/s00registro/AppBInstance.java new file mode 100644 index 0000000..db98b36 --- /dev/null +++ b/src/java/src/pt/c02oo/s04estatica/s00registro/AppBInstance.java @@ -0,0 +1,15 @@ +package pt.c02oo.s04estatica.s00registro; + +public class AppBInstance { + public static void main(String args[]) { + RegistroI r1 = new RegistroI(), + r2 = new RegistroI(); + r1.contador = 5; + r2.contador = 7; + + System.out.println("Contador r1: " + r1.contador); + System.out.println("Contador r2: " + r2.contador); + System.out.println("Contador r1: " + r1.proximoContador()); + System.out.println("Contador r2: " + r2.proximoContador()); + } +} diff --git a/src/java/src/pt/c02oo/s04estatica/s00registro/RegistroI.java b/src/java/src/pt/c02oo/s04estatica/s00registro/RegistroI.java new file mode 100644 index 0000000..8317b39 --- /dev/null +++ b/src/java/src/pt/c02oo/s04estatica/s00registro/RegistroI.java @@ -0,0 +1,10 @@ +package pt.c02oo.s04estatica.s00registro; + +public class RegistroI { + int contador = 0; + + int proximoContador() { + contador++; + return contador; + } +} diff --git a/src/java/src/pt/c02oo/s04estatica/s01registro/App1aStatic.java b/src/java/src/pt/c02oo/s04estatica/s01registro/App1aStatic.java index db97572..09ca040 100644 --- a/src/java/src/pt/c02oo/s04estatica/s01registro/App1aStatic.java +++ b/src/java/src/pt/c02oo/s04estatica/s01registro/App1aStatic.java @@ -2,9 +2,9 @@ public class App1aStatic { public static void main(String args[]) { - Registro.contador = 5; + RegistroS.contador = 5; - System.out.println("Contador: " + Registro.contador); - System.out.println("Contador: " + Registro.proximoContador()); + System.out.println("Contador: " + RegistroS.contador); + System.out.println("Contador: " + RegistroS.proximoContador()); } } diff --git a/src/java/src/pt/c02oo/s04estatica/s01registro/App1bStatic.java b/src/java/src/pt/c02oo/s04estatica/s01registro/App1bStatic.java index 29a3949..41f93b7 100644 --- a/src/java/src/pt/c02oo/s04estatica/s01registro/App1bStatic.java +++ b/src/java/src/pt/c02oo/s04estatica/s01registro/App1bStatic.java @@ -2,8 +2,8 @@ public class App1bStatic { public static void main(String args[]) { - Registro r1 = new Registro(), - r2 = new Registro(); + RegistroS r1 = new RegistroS(), + r2 = new RegistroS(); r1.contador = 5; r2.contador = 7; diff --git a/src/java/src/pt/c02oo/s04estatica/s01registro/Registro.java b/src/java/src/pt/c02oo/s04estatica/s01registro/RegistroS.java similarity index 86% rename from src/java/src/pt/c02oo/s04estatica/s01registro/Registro.java rename to src/java/src/pt/c02oo/s04estatica/s01registro/RegistroS.java index 5094635..a969479 100644 --- a/src/java/src/pt/c02oo/s04estatica/s01registro/Registro.java +++ b/src/java/src/pt/c02oo/s04estatica/s01registro/RegistroS.java @@ -1,6 +1,6 @@ package pt.c02oo.s04estatica.s01registro; -public class Registro { +public class RegistroS { static int contador = 0; static int proximoContador() {