diff --git a/README.md b/README.md index 44c92d7f5..ed6b2718d 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,15 @@ Ambiente de aprendizagem sobre o tema componentes de software. +# Navegando pelo Ambiente + +* [Navegando](navigate/) + Todos os exemplos no diretório `notebook` são preparados para o ambiente Jupyter. # Acionando os Notebooks via Binder * Última versão testada e estável: - [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/santanche/component2learn/v1.1.5) + [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/santanche/component2learn/v1.1.6) * Última versão disponível: [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/santanche/component2learn/master) diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/App0101BarChart.java b/java/src/pt/c08componentes/s01chartseq/s01push/App0101BarChart.java new file mode 100644 index 000000000..dc6fd96c5 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/App0101BarChart.java @@ -0,0 +1,18 @@ +package pt.c08componentes.s01chartseq.s01push; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; + +public class App0101BarChart { + public static void main(String args[]) { + BarChart bc1 = new BarChart(true, '#'); + bc1.plot(10); + bc1.plot(12); + bc1.plot(8); + System.out.println(); + + BarChart bc2 = new BarChart(false, '*'); + bc2.plot(4); + bc2.plot(5); + bc2.plot(7); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/App0102GeoChart.java b/java/src/pt/c08componentes/s01chartseq/s01push/App0102GeoChart.java new file mode 100644 index 000000000..8002521eb --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/App0102GeoChart.java @@ -0,0 +1,14 @@ +package pt.c08componentes.s01chartseq.s01push; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; +import pt.c08componentes.s01chartseq.s01push.sequence.GeometricProgressionPre; + +public class App0102GeoChart { + public static void main(String args[]) { + BarChart bc = new BarChart(true, '#'); + + GeometricProgressionPre gp = new GeometricProgressionPre(1, 2, 7, bc); + + gp.present(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/App0103GeoChartConnect.java b/java/src/pt/c08componentes/s01chartseq/s01push/App0103GeoChartConnect.java new file mode 100644 index 000000000..decc74945 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/App0103GeoChartConnect.java @@ -0,0 +1,15 @@ +package pt.c08componentes.s01chartseq.s01push; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; +import pt.c08componentes.s01chartseq.s01push.sequence.GeometricProgression; + +public class App0103GeoChartConnect { + public static void main(String args[]) { + BarChart bc = new BarChart(true, '#'); + + GeometricProgression gp = new GeometricProgression(1, 2, 7); + + gp.connect(bc); + gp.present(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/App0104GeoChartMultiple.java b/java/src/pt/c08componentes/s01chartseq/s01push/App0104GeoChartMultiple.java new file mode 100644 index 000000000..8db883025 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/App0104GeoChartMultiple.java @@ -0,0 +1,19 @@ +package pt.c08componentes.s01chartseq.s01push; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; +import pt.c08componentes.s01chartseq.s01push.sequence.GeometricProgression; + +public class App0104GeoChartMultiple { + public static void main(String args[]) { + BarChart bc1 = new BarChart(true, '#'); + BarChart bc2 = new BarChart(false, '*'); + + GeometricProgression gp = new GeometricProgression(1, 2, 7); + + gp.connect(bc1); + gp.present(); + + gp.connect(bc2); + gp.present(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/README.md b/java/src/pt/c08componentes/s01chartseq/s01push/README.md new file mode 100644 index 000000000..50344de6a --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/README.md @@ -0,0 +1,230 @@ +# Classes pre-Componentes / Abordagem Push + +*Documentação gerada a partir do Notebook Jupyter do mesmo exemplo em `notebooks/pt/s04components/s01chart/s01push.ipynb`* + +# Componentes `GeometricProgresion` e `BarChart` trabalhando em conjunto via Push + +Neste exemplo usaremos a abordagem **Push**, ou seja, o objeto da classe GeometricProgression controla todo o processo gerando a sequência de números e pede para o BarChart plotar cada valor. + +O `BarChart` atua de forma passiva, aguardando que lhe solicitem que plote algo. + +## `BarChart` Component + +Plota um gráfico de barras no console sob demanda. + +* Atributos + * `filled` - define se a plotagem será preenchida; + * `character` - define o caractere da plotagem. +* Método + * `plot()` - plota uma barra do gráfico. + + +```Java +public class BarChart { + private boolean filled; + private char character; + + public BarChart(boolean filled, char character) { + this.filled = filled; + this.character = character; + } + + public void plot(int value) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + } +} +``` + +## Usando objetos da classe `BarChart` + +Abaixo um exemplo de como objetos da classe `BarChart` podem ser usados. + + +```Java +BarChart bc1 = new BarChart(true, '#'); +bc1.plot(10); +bc1.plot(12); +bc1.plot(8); +System.out.println(); + +BarChart bc2 = new BarChart(false, '*'); +bc2.plot(4); +bc2.plot(5); +bc2.plot(7); +``` + + ########## + ############ + ######## + + * + * + * + +## Classe `GeometricProgressionPre` + +Gera uma sequência de números que crescem em progressão geométrica. + +* Atributos + * `initial` - valor inicial da sequência; + * `ratio` - taxa de crescimento da progressão; + * `n` - quantidade de valores na sequência; + * `output` - referência para um objeto da classe `BarChart`. +* Métodos + * `present` - apresenta o gráfico exponencial (em conjunto com um objeto da classe `BarChart`). + + +```Java +public class GeometricProgressionPre { + private int initial, + ratio, + n; + private BarChart output; + + public GeometricProgressionPre(int initial, int ratio, int n, BarChart output) { + this.initial = initial; + this.ratio = ratio; + this.n = n; + this.output = output; + } + + public void present() { + if (output != null) { + int value = initial; + for (int s = 1; s <= n; s++) { + output.plot(value); + value *= ratio; + } + } + } +} +``` + +## Criando objetos associados + +Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart`. O objeto da classe `GeometricProgression` recebe uma referência do objeto `BarChart` no construtor para se relacionar com ele. + + +```Java +BarChart bc = new BarChart(true, '#'); + +GeometricProgressionPre gp = new GeometricProgressionPre(1, 2, 7, bc); + +gp.present(); +``` + + # + ## + #### + ######## + ################ + ################################ + ################################################################ + +## Classe `GeometricProgression` + +No `GeometricProgressionPre` a associação com o objeto `BarChart` foi feita pelo construtor, o que limita as possibilidades de combinação, por exemplo, quando queremos conectar a mesma progressão com diversos dispositivos de saída. + +### Usando Conectores + +Uma abordagem derivada dos componentes considera usar a ideia de conector para ligar dois objetos usando o método `connect`. + +* Métodos adicional + * `conect` - conecta dois objetos informando a um deles (`GeometricProgression`) a identidade do outro `BarChart`. + + +```Java +public class GeometricProgression { + private int initial, + ratio, + n; + private BarChart output; + + public GeometricProgression(int initial, int ratio, int n) { + this.initial = initial; + this.ratio = ratio; + this.n = n; + this.output = null; + } + + public void connect(BarChart output) { + this.output = output; + } + + public void present() { + if (output != null) { + int value = initial; + for (int s = 1; s <= n; s++) { + output.plot(value); + value *= ratio; + } + } + } +} +``` + +## Criando e Conectando objetos - abordagem Push + +Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart` e os conecta através do novo método `connect`. Por ser uma abordagem Push, o `GeometricProgression` tem a referência do `BarChart` e envia (“empurra”) valores para ele. + + +```Java +BarChart bc = new BarChart(true, '#'); + +GeometricProgression gp = new GeometricProgression(1, 2, 7); + +gp.connect(bc); +gp.present(); +``` + + # + ## + #### + ######## + ################ + ################################ + ################################################################ + +## Conectando o objeto `GeometricProgression` com dois objetos `BarChart` - abordagem Push + +Exemplo conectando o mesmo objeto da classe `GeometricProgression` com dois objetos da classe `BarChart`. + +```Java +BarChart bc1 = new BarChart(true, '#'); +BarChart bc2 = new BarChart(false, '*'); + +GeometricProgression gp = new GeometricProgression(1, 2, 7); + +gp.connect(bc1); +gp.present(); + +gp.connect(bc2); +gp.present(); +``` + + # + ## + #### + ######## + ################ + ################################ + ################################################################ + * + * + * + * + * + * + * + +# Tarefa do Gráfico de Segundo Grau + +## Função de segundo grau + +Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Push** e os enviem para um objeto `BarChart`. + +## Plotagem de parábola + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Push**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados. diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s01push/chart/BarChart.java new file mode 100644 index 000000000..d5e027fe1 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/chart/BarChart.java @@ -0,0 +1,17 @@ +package pt.c08componentes.s01chartseq.s01push.chart; + +public class BarChart { + private boolean filled; + private char character; + + public BarChart(boolean filled, char character) { + this.filled = filled; + this.character = character; + } + + public void plot(int value) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + } +} \ No newline at end of file diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgression.java new file mode 100644 index 000000000..af20db1b1 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgression.java @@ -0,0 +1,31 @@ +package pt.c08componentes.s01chartseq.s01push.sequence; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; + +public class GeometricProgression { + private int initial, + ratio, + n; + private BarChart output; + + public GeometricProgression(int initial, int ratio, int n) { + this.initial = initial; + this.ratio = ratio; + this.n = n; + this.output = null; + } + + public void connect(BarChart output) { + this.output = output; + } + + public void present() { + if (output != null) { + int value = initial; + for (int s = 1; s <= n; s++) { + output.plot(value); + value *= ratio; + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgressionPre.java b/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgressionPre.java new file mode 100644 index 000000000..f7f71875b --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s01push/sequence/GeometricProgressionPre.java @@ -0,0 +1,27 @@ +package pt.c08componentes.s01chartseq.s01push.sequence; + +import pt.c08componentes.s01chartseq.s01push.chart.BarChart; + +public class GeometricProgressionPre { + private int initial, + ratio, + n; + private BarChart output; + + public GeometricProgressionPre(int initial, int ratio, int n, BarChart output) { + this.initial = initial; + this.ratio = ratio; + this.n = n; + this.output = output; + } + + public void present() { + if (output != null) { + int value = initial; + for (int s = 1; s <= n; s++) { + output.plot(value); + value *= ratio; + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java deleted file mode 100644 index 903d6e55e..000000000 --- a/java/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java +++ /dev/null @@ -1,22 +0,0 @@ -package pt.c08componentes.s01chartseq.s01start; - -import pt.c08componentes.s01chartseq.s01start.chart.BarChart; -import pt.c08componentes.s01chartseq.s01start.chart.IBarChart; -import pt.c08componentes.s01chartseq.s01start.sequence.GeometricProgression; -import pt.c08componentes.s01chartseq.s01start.sequence.IGeometricProgression; - -public class App01ChartSequence { - public static void main(String args[]) { - IGeometricProgression gp = new GeometricProgression(); - gp.setInitial(1); - gp.setRatio(2); - - IBarChart bc = new BarChart(); - bc.setFilled(true); - bc.setCharacter('#'); - bc.setN(5); - - bc.connect(gp); - bc.plot(); - } -} diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java deleted file mode 100644 index a8faba075..000000000 --- a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java +++ /dev/null @@ -1,5 +0,0 @@ -package pt.c08componentes.s01chartseq.s01start.chart; - -public interface IChart { - public void plot(); -} diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java b/java/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java deleted file mode 100644 index e52a8ebac..000000000 --- a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java +++ /dev/null @@ -1,7 +0,0 @@ -package pt.c08componentes.s01chartseq.s01start.chart; - -import pt.c08componentes.s01chartseq.s01start.sequence.ISequence; - -public interface IRSequence { - public void connect(ISequence sequence); -} diff --git a/java/src/pt/c08componentes/s01chartseq/s02pull/App0201GeoChart.java b/java/src/pt/c08componentes/s01chartseq/s02pull/App0201GeoChart.java new file mode 100644 index 000000000..0800e424f --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s02pull/App0201GeoChart.java @@ -0,0 +1,15 @@ +package pt.c08componentes.s01chartseq.s02pull; + +import pt.c08componentes.s01chartseq.s02pull.chart.BarChart; +import pt.c08componentes.s01chartseq.s02pull.sequence.GeometricProgression; + +public class App0201GeoChart { + public static void main(String args[]) { + GeometricProgression gp = new GeometricProgression(1, 2); + + BarChart bc = new BarChart(true, '#', 7); + + bc.connect(gp); + bc.plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02pull/App0202GeoChartMultiple.java b/java/src/pt/c08componentes/s01chartseq/s02pull/App0202GeoChartMultiple.java new file mode 100644 index 000000000..2e990f230 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s02pull/App0202GeoChartMultiple.java @@ -0,0 +1,19 @@ +package pt.c08componentes.s01chartseq.s02pull; + +import pt.c08componentes.s01chartseq.s02pull.chart.BarChart; +import pt.c08componentes.s01chartseq.s02pull.sequence.GeometricProgression; + +public class App0202GeoChartMultiple { + public static void main(String args[]) { + GeometricProgression gp = new GeometricProgression(1, 2); + + BarChart bc1 = new BarChart(true, '#', 7); + BarChart bc2 = new BarChart(false, '*', 7); + + bc1.connect(gp); + bc1.plot(); + + bc2.connect(gp); + bc2.plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02pull/README.md b/java/src/pt/c08componentes/s01chartseq/s02pull/README.md new file mode 100644 index 000000000..09821a182 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s02pull/README.md @@ -0,0 +1,171 @@ +# Classes pre-Componentes / Abordagem Pull + +*Documentação gerada a partir do Notebook Jupyter do mesmo exemplo em `notebooks/pt/s04components/s01chart/s02pull.ipynb`* + +# Componentes `GeometricProgresion` e `BarChart` trabalhando em conjunto via Pull + +Neste exemplo usaremos a abordagem **Pull**, ou seja, o objeto da classe `BarChart` controla todo o processo e solicita os valores para o objeto da classe `GeometricProgression`. + +## `GeometricProgression` abordagem Pull + +O `GeometricProgression` passa a atuar de forma passiva, aguardando que lhe solicitem valores através dos métodos `first` e `next`. + +Três modificações podem ser observadas: +1. a informação do número de valores plotados (`n`) passa para o `BarChart` que controla o processo; +2. o `BarChart` passa a ter a referência para o `GeometricProgression` que, por sua vez, não tem mais a referência e consequentemente o `connect`; +3. o método `present` que atuava ativamente gerando a sequência e enviando para o gráfico foi substituído por dois métodos (`first` e `next`) que atuam passivamente aguardando a solicitação de valor. + +## Classe `GeometricProgression` + +Gera uma sequência de números que crescem em progressão geométrica. + +* Atributos + * `initial` - valor inicial da sequência; + * `ratio` - taxa de crescimento da progressão; + * `current` - valor corrente (para controle interno). +* Métodos + * `first` - gera o primeiro valor da sequência e o retorna; + * `next` - gera o próximo valor da sequência (em relação à última solicitação) e o retorna. + + +```Java +public class GeometricProgression { + private int initial, + ratio; + private int current; + + public GeometricProgression(int initial, int ratio) { + this.initial = initial; + this.ratio = ratio; + current = initial; + } + + public int first() { + current = initial; + return current; + } + + public int next() { + current *= ratio; + return current; + } +} + +## `BarChart` abordagem Pull + +Três modificações podem ser observadas: +1. o método `plot` foi modificado -- em vez de plotar apenas uma barra, ele plota o gráfico inteiro, já que o `BarChart` controla o processo; +2. por causa da modificação (1), o `BarChart` passa a ter a informação de quantos valores serão plotados; +3. o `BarChart` passa a ter o método `connect`, já que ele guarda a referência para o objeto `GeometricProgression` para solicitar os valores. + +## `BarChart` Component + +Plota um gráfico de barras no console coletando ativamente dados a serem plotados. + +* Atributos + * `filled` - define se a plotagem será preenchida; + * `character` - define o caractere da plotagem; + * `n` - quantidade de valores na sequência; + * `sequence` - referência para um objeto da classe `BarChart`. +* Método + * `conect` - conecta dois objetos informando a um deles (`BarChart`) a identidade do outro `GeometricProgression`. + * `plot()` - plota o gráfico inteiro. + + +```Java +public class BarChart { + private boolean filled; + private char character; + private int n; + + private GeometricProgression sequence; + + public BarChart(boolean filled, char character, int n) { + this.filled = filled; + this.character = character; + this.n = n; + this.sequence = null; + } + + public void connect(GeometricProgression sequence) { + this.sequence = sequence; + } + + public void plot() { + if (sequence != null) { + int value = sequence.first(); + for (int s = 1; s <= n; s++) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + value = sequence.next(); + } + } + } +} +``` + +## Criando e Conectando objetos - abordagem Pull + +Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart` e os conecta através do novo método `connect`. Note que há uma inversão em relação a abordagem **Pull**. Aqui, o `BarChart` possui o método `connect` e se conecta ao `GeometricProgression` de quem ele solicitará os valores. + + +```Java +GeometricProgression gp = new GeometricProgression(1, 2); + +BarChart bc = new BarChart(true, '#', 7); + +bc.connect(gp); +bc.plot(); +``` + + # + ## + #### + ######## + ################ + ################################ + ################################################################ + +## Conectando o objeto `GeometricProgression` com dois objetos `BarChart` - abordagem Pull + +Exemplo conectando o mesmo objeto da classe `GeometricProgression` com dois objetos da classe `BarChart`. + + +```Java +GeometricProgression gp = new GeometricProgression(1, 2); + +BarChart bc1 = new BarChart(true, '#', 7); +BarChart bc2 = new BarChart(false, '*', 7); + +bc1.connect(gp); +bc1.plot(); + +bc2.connect(gp); +bc2.plot(); +``` + + # + ## + #### + ######## + ################ + ################################ + ################################################################ + * + * + * + * + * + * + * + +# Tarefa do Gráfico de Segundo Grau + +## Função de segundo grau + +Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Pull**, ou seja, são produzidos sob demanda a partir de solicitação dos métodos `first` e `next`. + +## Plotagem de parábola + +Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Pull**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados. diff --git a/java/src/pt/c08componentes/s01chartseq/s02pull/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s02pull/chart/BarChart.java new file mode 100644 index 000000000..e2f7e6327 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s02pull/chart/BarChart.java @@ -0,0 +1,34 @@ +package pt.c08componentes.s01chartseq.s02pull.chart; + +import pt.c08componentes.s01chartseq.s02pull.sequence.GeometricProgression; + +public class BarChart { + private boolean filled; + private char character; + private int n; + + private GeometricProgression sequence; + + public BarChart(boolean filled, char character, int n) { + this.filled = filled; + this.character = character; + this.n = n; + this.sequence = null; + } + + public void connect(GeometricProgression sequence) { + this.sequence = sequence; + } + + public void plot() { + if (sequence != null) { + int value = sequence.first(); + for (int s = 1; s <= n; s++) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + value = sequence.next(); + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02pull/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s02pull/sequence/GeometricProgression.java new file mode 100644 index 000000000..2d2b36631 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s02pull/sequence/GeometricProgression.java @@ -0,0 +1,23 @@ +package pt.c08componentes.s01chartseq.s02pull.sequence; + +public class GeometricProgression { + private int initial, + ratio; + private int current; + + public GeometricProgression(int initial, int ratio) { + this.initial = initial; + this.ratio = ratio; + current = initial; + } + + public int first() { + current = initial; + return current; + } + + public int next() { + current *= ratio; + return current; + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java deleted file mode 100644 index f6be0ea27..000000000 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java +++ /dev/null @@ -1,5 +0,0 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; - -public interface IChart { - public void plot(); -} diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java b/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java deleted file mode 100644 index 94a5b2d5c..000000000 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java +++ /dev/null @@ -1,7 +0,0 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; - -import pt.c08componentes.s01chartseq.s02sequences.sequence.ISequence; - -public interface IRSequence { - public void connect(ISequence sequence); -} diff --git a/java/src/pt/c08componentes/s01chartseq/s03properties/App01ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s03properties/App01ChartSequence.java new file mode 100644 index 000000000..04191ade1 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s03properties/App01ChartSequence.java @@ -0,0 +1,14 @@ +package pt.c08componentes.s01chartseq.s03properties; + +import pt.c08componentes.s01chartseq.s03properties.chart.BarChart; +import pt.c08componentes.s01chartseq.s03properties.sequence.GeometricProgression; + +public class App01ChartSequence { + public static void main(String args[]) { + GeometricProgression gp = new GeometricProgression(1, 2); + + BarChart bc = new BarChart(true, '#', 5, gp); + + bc.plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s03properties/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s03properties/chart/BarChart.java new file mode 100644 index 000000000..f69ed2566 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s03properties/chart/BarChart.java @@ -0,0 +1,55 @@ +package pt.c08componentes.s01chartseq.s03properties.chart; + +import pt.c08componentes.s01chartseq.s03properties.sequence.GeometricProgression; + +public class BarChart { + private boolean filled; + private char character; + private int n; + + private GeometricProgression sequence; + + public BarChart(boolean filled, char character, int n, + GeometricProgression sequence) { + this.filled = filled; + this.character = character; + this.n = n; + this.sequence = sequence; + } + + public boolean isFilled() { + return filled; + } + + public void setFilled(boolean filled) { + this.filled = filled; + } + + public char getCharacter() { + return character; + } + + public void setCharacter(char character) { + this.character = character; + } + + public int getN() { + return n; + } + + public void setN(int n) { + this.n = n; + } + + public void plot() { + if (sequence != null) { + int value = sequence.first(); + for (int s = 1; s <= n; s++) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + value = sequence.next(); + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s03properties/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s03properties/sequence/GeometricProgression.java new file mode 100644 index 000000000..93f7cad1a --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s03properties/sequence/GeometricProgression.java @@ -0,0 +1,39 @@ +package pt.c08componentes.s01chartseq.s03properties.sequence; + +public class GeometricProgression { + private int initial, + ratio; + private int current; + + public GeometricProgression(int initial, int ratio) { + this.initial = initial; + this.ratio = ratio; + current = initial; + } + + public int getInitial() { + return initial; + } + + public void setInitial(int initial) { + this.initial = initial; + } + + public int getRatio() { + return ratio; + } + + public void setRatio(int ratio) { + this.ratio = ratio; + } + + public int first() { + current = initial; + return current; + } + + public int next() { + current *= ratio; + return current; + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s04interface/App02ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s04interface/App02ChartSequence.java new file mode 100644 index 000000000..152b5d031 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s04interface/App02ChartSequence.java @@ -0,0 +1,16 @@ +package pt.c08componentes.s01chartseq.s04interface; + +import pt.c08componentes.s01chartseq.s04interface.chart.BarChart; +import pt.c08componentes.s01chartseq.s04interface.chart.IChart; +import pt.c08componentes.s01chartseq.s04interface.sequence.GeometricProgression; +import pt.c08componentes.s01chartseq.s04interface.sequence.ISequence; + +public class App02ChartSequence { + public static void main(String args[]) { + ISequence gp = new GeometricProgression(1, 2); + + IChart bc = new BarChart(true, '#', 5, gp); + + bc.plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s04interface/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s04interface/chart/BarChart.java new file mode 100644 index 000000000..a3eaf704a --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s04interface/chart/BarChart.java @@ -0,0 +1,55 @@ +package pt.c08componentes.s01chartseq.s04interface.chart; + +import pt.c08componentes.s01chartseq.s04interface.sequence.ISequence; + +public class BarChart implements IChart { + private boolean filled; + private char character; + private int n; + + private ISequence sequence; + + public BarChart(boolean filled, char character, int n, + ISequence sequence) { + this.filled = filled; + this.character = character; + this.n = n; + this.sequence = sequence; + } + + public boolean isFilled() { + return filled; + } + + public void setFilled(boolean filled) { + this.filled = filled; + } + + public char getCharacter() { + return character; + } + + public void setCharacter(char character) { + this.character = character; + } + + public int getN() { + return n; + } + + public void setN(int n) { + this.n = n; + } + + public void plot() { + if (sequence != null) { + int value = sequence.first(); + for (int s = 1; s <= n; s++) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + value = sequence.next(); + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s04interface/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s04interface/chart/IChart.java new file mode 100644 index 000000000..493178e97 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s04interface/chart/IChart.java @@ -0,0 +1,5 @@ +package pt.c08componentes.s01chartseq.s04interface.chart; + +public interface IChart { + public void plot(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s04interface/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s04interface/sequence/GeometricProgression.java new file mode 100644 index 000000000..1b6e45eb4 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s04interface/sequence/GeometricProgression.java @@ -0,0 +1,39 @@ +package pt.c08componentes.s01chartseq.s04interface.sequence; + +public class GeometricProgression implements ISequence { + private int initial, + ratio; + private int current; + + public GeometricProgression(int initial, int ratio) { + this.initial = initial; + this.ratio = ratio; + current = initial; + } + + public int getInitial() { + return initial; + } + + public void setInitial(int initial) { + this.initial = initial; + } + + public int getRatio() { + return ratio; + } + + public void setRatio(int ratio) { + this.ratio = ratio; + } + + public int first() { + current = initial; + return current; + } + + public int next() { + current *= ratio; + return current; + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java b/java/src/pt/c08componentes/s01chartseq/s04interface/sequence/ISequence.java similarity index 55% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java rename to java/src/pt/c08componentes/s01chartseq/s04interface/sequence/ISequence.java index c1a0e2915..a1424c030 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java +++ b/java/src/pt/c08componentes/s01chartseq/s04interface/sequence/ISequence.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s04interface.sequence; public interface ISequence { public int first(); diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/App03ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/App03ChartSequence.java new file mode 100644 index 000000000..6e1c5daa7 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/App03ChartSequence.java @@ -0,0 +1,25 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces; + +import pt.c08componentes.s01chartseq.s05allinterfaces.chart.BarChart; +import pt.c08componentes.s01chartseq.s05allinterfaces.chart.IBarChartProperties; +import pt.c08componentes.s01chartseq.s05allinterfaces.chart.IChart; +import pt.c08componentes.s01chartseq.s05allinterfaces.chart.IRSequence; +import pt.c08componentes.s01chartseq.s05allinterfaces.sequence.GeometricProgression; +import pt.c08componentes.s01chartseq.s05allinterfaces.sequence.IGeometricProgressionProperties; +import pt.c08componentes.s01chartseq.s05allinterfaces.sequence.ISequence; + +public class App03ChartSequence { + public static void main(String args[]) { + IGeometricProgressionProperties gp = new GeometricProgression(); + gp.setInitial(1); + gp.setRatio(2); + + IBarChartProperties bc = new BarChart(); + bc.setFilled(true); + bc.setCharacter('#'); + bc.setN(5); + + ((IRSequence)bc).connect((ISequence)gp); + ((IChart)bc).plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/BarChart.java new file mode 100644 index 000000000..30b3cda3c --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/BarChart.java @@ -0,0 +1,57 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.chart; + +import pt.c08componentes.s01chartseq.s05allinterfaces.sequence.ISequence; + +public class BarChart implements IChart, IRSequence, IBarChartProperties { + private boolean filled; + private char character; + private int n; + + private ISequence sequence; + + public BarChart() { + filled = true; + character = '*'; + n = 3; + } + + public boolean isFilled() { + return filled; + } + + public void setFilled(boolean filled) { + this.filled = filled; + } + + public char getCharacter() { + return character; + } + + public void setCharacter(char character) { + this.character = character; + } + + public int getN() { + return n; + } + + public void setN(int n) { + this.n = n; + } + + public void connect(ISequence sequence) { + this.sequence = sequence; + } + + public void plot() { + if (sequence != null) { + int value = sequence.first(); + for (int s = 1; s <= n; s++) { + for (int v = 1; v < value; v++) + System.out.print((filled) ? character : ' '); + System.out.println(character); + value = sequence.next(); + } + } + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IBarChartProperties.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IBarChartProperties.java new file mode 100644 index 000000000..85a3850e6 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IBarChartProperties.java @@ -0,0 +1,12 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.chart; + +public interface IBarChartProperties { + public boolean isFilled(); + public void setFilled(boolean filled); + + public char getCharacter(); + public void setCharacter(char character); + + public int getN(); + public void setN(int n); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IChart.java new file mode 100644 index 000000000..231d4f9bb --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IChart.java @@ -0,0 +1,5 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.chart; + +public interface IChart { + public void plot(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IRSequence.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IRSequence.java new file mode 100644 index 000000000..c4b30e7e5 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/chart/IRSequence.java @@ -0,0 +1,7 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.chart; + +import pt.c08componentes.s01chartseq.s05allinterfaces.sequence.ISequence; + +public interface IRSequence { + public void connect(ISequence sequence); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/GeometricProgression.java new file mode 100644 index 000000000..6072f7f2f --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/GeometricProgression.java @@ -0,0 +1,39 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.sequence; + +public class GeometricProgression implements ISequence, IGeometricProgressionProperties { + private int initial, + ratio; + private int current; + + public GeometricProgression() { + initial = 1; + ratio = 2; + current = initial; + } + + public int getInitial() { + return initial; + } + + public void setInitial(int initial) { + this.initial = initial; + } + + public int getRatio() { + return ratio; + } + + public void setRatio(int ratio) { + this.ratio = ratio; + } + + public int first() { + current = initial; + return current; + } + + public int next() { + current *= ratio; + return current; + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/IGeometricProgressionProperties.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/IGeometricProgressionProperties.java new file mode 100644 index 000000000..ed974d819 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/IGeometricProgressionProperties.java @@ -0,0 +1,9 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.sequence; + +public interface IGeometricProgressionProperties { + public int getInitial(); + public void setInitial(int initial); + + public int getRatio(); + public void setRatio(int ratio); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/ISequence.java b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/ISequence.java new file mode 100644 index 000000000..c56453ffd --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s05allinterfaces/sequence/ISequence.java @@ -0,0 +1,6 @@ +package pt.c08componentes.s01chartseq.s05allinterfaces.sequence; + +public interface ISequence { + public int first(); + public int next(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s06components/App04ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s06components/App04ChartSequence.java new file mode 100644 index 000000000..b5ae8fb51 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s06components/App04ChartSequence.java @@ -0,0 +1,22 @@ +package pt.c08componentes.s01chartseq.s06components; + +import pt.c08componentes.s01chartseq.s06components.chart.BarChart; +import pt.c08componentes.s01chartseq.s06components.chart.IBarChart; +import pt.c08componentes.s01chartseq.s06components.sequence.GeometricProgression; +import pt.c08componentes.s01chartseq.s06components.sequence.IGeometricProgression; + +public class App04ChartSequence { + public static void main(String args[]) { + IGeometricProgression gp = new GeometricProgression(); + gp.setInitial(1); + gp.setRatio(2); + + IBarChart bc = new BarChart(); + bc.setFilled(true); + bc.setCharacter('#'); + bc.setN(5); + + bc.connect(gp); + bc.plot(); + } +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s06components/chart/BarChart.java similarity index 89% rename from java/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java rename to java/src/pt/c08componentes/s01chartseq/s06components/chart/BarChart.java index 32fcd1b14..f0bf7592f 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/chart/BarChart.java @@ -1,6 +1,6 @@ -package pt.c08componentes.s01chartseq.s01start.chart; +package pt.c08componentes.s01chartseq.s06components.chart; -import pt.c08componentes.s01chartseq.s01start.sequence.ISequence; +import pt.c08componentes.s01chartseq.s06components.sequence.ISequence; public class BarChart implements IBarChart { private boolean filled; diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChart.java similarity index 60% rename from java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java rename to java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChart.java index 2ea3a6e0a..39b1ecb21 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChart.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.chart; +package pt.c08componentes.s01chartseq.s06components.chart; public interface IBarChart extends IChart, IBarChartProperties, IRSequence { diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChartProperties.java similarity index 80% rename from java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java rename to java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChartProperties.java index 125e25c74..e74b9ba17 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IBarChartProperties.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.chart; +package pt.c08componentes.s01chartseq.s06components.chart; public interface IBarChartProperties { public boolean isFilled(); diff --git a/java/src/pt/c08componentes/s01chartseq/s06components/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IChart.java new file mode 100644 index 000000000..bc38bbed3 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IChart.java @@ -0,0 +1,5 @@ +package pt.c08componentes.s01chartseq.s06components.chart; + +public interface IChart { + public void plot(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s06components/chart/IRSequence.java b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IRSequence.java new file mode 100644 index 000000000..d46f3e4c8 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s06components/chart/IRSequence.java @@ -0,0 +1,7 @@ +package pt.c08componentes.s01chartseq.s06components.chart; + +import pt.c08componentes.s01chartseq.s06components.sequence.ISequence; + +public interface IRSequence { + public void connect(ISequence sequence); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/GeometricProgression.java similarity index 91% rename from java/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java rename to java/src/pt/c08componentes/s01chartseq/s06components/sequence/GeometricProgression.java index 28dc6cdc7..b94d34263 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/GeometricProgression.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.sequence; +package pt.c08componentes.s01chartseq.s06components.sequence; public class GeometricProgression implements IGeometricProgression { private int initial, diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgression.java similarity index 62% rename from java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java rename to java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgression.java index fed89acf0..a04dbb9df 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgression.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.sequence; +package pt.c08componentes.s01chartseq.s06components.sequence; public interface IGeometricProgression extends ISequence, IGeometricProgressionProperties { diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgressionProperties.java similarity index 75% rename from java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java rename to java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgressionProperties.java index 3d4fcb590..8d8fd06a2 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java +++ b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/IGeometricProgressionProperties.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.sequence; +package pt.c08componentes.s01chartseq.s06components.sequence; public interface IGeometricProgressionProperties { public int getInitial(); diff --git a/java/src/pt/c08componentes/s01chartseq/s06components/sequence/ISequence.java b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/ISequence.java new file mode 100644 index 000000000..bd7533a80 --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s06components/sequence/ISequence.java @@ -0,0 +1,6 @@ +package pt.c08componentes.s01chartseq.s06components.sequence; + +public interface ISequence { + public int first(); + public int next(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/App05ChartSequence.java similarity index 54% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/App05ChartSequence.java index 9f8b4f2d0..dcec558f6 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/App05ChartSequence.java @@ -1,13 +1,13 @@ -package pt.c08componentes.s01chartseq.s02sequences; +package pt.c08componentes.s01chartseq.s07multiple; -import pt.c08componentes.s01chartseq.s02sequences.chart.GraphicBarChart; -import pt.c08componentes.s01chartseq.s02sequences.chart.IBarChart; -import pt.c08componentes.s01chartseq.s02sequences.sequence.Fibonacci; -import pt.c08componentes.s01chartseq.s02sequences.sequence.GeometricProgression; -import pt.c08componentes.s01chartseq.s02sequences.sequence.IMathRatioSequence; -import pt.c08componentes.s01chartseq.s02sequences.sequence.IMathSequence; +import pt.c08componentes.s01chartseq.s07multiple.chart.GraphicBarChart; +import pt.c08componentes.s01chartseq.s07multiple.chart.IBarChart; +import pt.c08componentes.s01chartseq.s07multiple.sequence.Fibonacci; +import pt.c08componentes.s01chartseq.s07multiple.sequence.GeometricProgression; +import pt.c08componentes.s01chartseq.s07multiple.sequence.IMathRatioSequence; +import pt.c08componentes.s01chartseq.s07multiple.sequence.IMathSequence; -public class App02ChartSequence { +public class App05ChartSequence { public static void main(String args[]) { System.out.println("Geometric Progression:"); diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/BarChart.java similarity index 81% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/chart/BarChart.java index e322ba5a2..ca5f8463c 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/BarChart.java @@ -1,6 +1,6 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; +package pt.c08componentes.s01chartseq.s07multiple.chart; -import pt.c08componentes.s01chartseq.s02sequences.sequence.ISequence; +import pt.c08componentes.s01chartseq.s07multiple.sequence.ISequence; public abstract class BarChart implements IBarChart { protected boolean filled; diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/ConsoleBarChart.java similarity index 92% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/chart/ConsoleBarChart.java index 603f36a25..5d634379d 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/ConsoleBarChart.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; +package pt.c08componentes.s01chartseq.s07multiple.chart; public class ConsoleBarChart extends BarChart { private char character; diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/GraphicBarChart.java similarity index 95% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/chart/GraphicBarChart.java index fce36dbfa..7b2ba5595 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/GraphicBarChart.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; +package pt.c08componentes.s01chartseq.s07multiple.chart; import java.util.ArrayList; import java.util.List; diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChart.java similarity index 60% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChart.java index d8dcba4a2..67885c87c 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChart.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; +package pt.c08componentes.s01chartseq.s07multiple.chart; public interface IBarChart extends IChart, IRSequence, IBarChartProperties { diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChartProperties.java similarity index 73% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChartProperties.java index a01ae1109..2d6b97604 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IBarChartProperties.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.chart; +package pt.c08componentes.s01chartseq.s07multiple.chart; public interface IBarChartProperties { public boolean isFilled(); diff --git a/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IChart.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IChart.java new file mode 100644 index 000000000..7c710190b --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IChart.java @@ -0,0 +1,5 @@ +package pt.c08componentes.s01chartseq.s07multiple.chart; + +public interface IChart { + public void plot(); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IRSequence.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IRSequence.java new file mode 100644 index 000000000..8e31dd45e --- /dev/null +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/chart/IRSequence.java @@ -0,0 +1,7 @@ +package pt.c08componentes.s01chartseq.s07multiple.chart; + +import pt.c08componentes.s01chartseq.s07multiple.sequence.ISequence; + +public interface IRSequence { + public void connect(ISequence sequence); +} diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ArithmeticProgression.java similarity index 83% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ArithmeticProgression.java index cbf3594c4..0e88c68d7 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ArithmeticProgression.java @@ -1,6 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; - -import pt.c06patterns.factory.s10components.sequence.IMathRatioSequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public class ArithmeticProgression implements IMathRatioSequence { private int initial, diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/Fibonacci.java similarity index 93% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/Fibonacci.java index df18d4138..19f3180c9 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/Fibonacci.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public class Fibonacci implements IMathSequence { private int initialCurrent, initialNext; diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/GeometricProgression.java similarity index 91% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/GeometricProgression.java index 2d5ed8eb0..5eebc79de 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/GeometricProgression.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public class GeometricProgression implements IMathRatioSequence { private int initial, diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathRatioSequence.java similarity index 60% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathRatioSequence.java index 902000c8e..65767fb6e 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathRatioSequence.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public interface IMathRatioSequence extends IMathSequence, ISeqRatioProperties { diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathSequence.java similarity index 58% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathSequence.java index ae1db7ae2..000731e61 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/IMathSequence.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public interface IMathSequence extends ISequence, ISeqInitialProperties { diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqInitialProperties.java similarity index 64% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqInitialProperties.java index 3ee72042d..3bb5f52ac 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqInitialProperties.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public interface ISeqInitialProperties { public int getInitial(); diff --git a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqRatioProperties.java similarity index 63% rename from java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqRatioProperties.java index 1c8d98ce5..235ccd191 100644 --- a/java/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISeqRatioProperties.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s02sequences.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public interface ISeqRatioProperties { public int getRatio(); diff --git a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISequence.java similarity index 56% rename from java/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java rename to java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISequence.java index 8e53c1923..d7019ee33 100644 --- a/java/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java +++ b/java/src/pt/c08componentes/s01chartseq/s07multiple/sequence/ISequence.java @@ -1,4 +1,4 @@ -package pt.c08componentes.s01chartseq.s01start.sequence; +package pt.c08componentes.s01chartseq.s07multiple.sequence; public interface ISequence { public int first(); diff --git a/navigate/README.md b/navigate/README.md new file mode 100644 index 000000000..dbfaa5d7e --- /dev/null +++ b/navigate/README.md @@ -0,0 +1,9 @@ +# Navegação pelo `component2learn` + +# Exemplos de componentes Java + +## Componentes Gráficos & Geradores de Números + +* Começando com Classes + * abordagem **Push** em [Java](../java/src/pt/c08componentes/s01chartseq/s01push/) (Eclipse ou VSCode) e [Notebook](../notebooks/pt/s04components/s01chart/s01push.ipynb) + * abordagem **Pull** em [Java](../java/src/pt/c08componentes/s01chartseq/s02pull/) (Eclipse ou VSCode) e [Notebook](../notebooks/pt/s04components/s01chart/s02pull.ipynb) \ No newline at end of file diff --git a/notebooks/pt/s04components/s01chart/s01push.ipynb b/notebooks/pt/s04components/s01chart/s01push.ipynb new file mode 100644 index 000000000..c51fea50b --- /dev/null +++ b/notebooks/pt/s04components/s01chart/s01push.ipynb @@ -0,0 +1,453 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Classes pre-Componentes / Abordagem Push" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Componentes `GeometricProgresion` e `BarChart` trabalhando em conjunto via Push\n", + "\n", + "Neste exemplo usaremos a abordagem **Push**, ou seja, o objeto da classe GeometricProgression controla todo o processo gerando a sequência de números e pede para o BarChart plotar cada valor.\n", + "\n", + "O `BarChart` atua de forma passiva, aguardando que lhe solicitem que plote algo.\n", + "\n", + "## `BarChart` Component\n", + "\n", + "Plota um gráfico de barras no console sob demanda.\n", + "\n", + "* Atributos\n", + " * `filled` - define se a plotagem será preenchida;\n", + " * `character` - define o caractere da plotagem.\n", + "* Método\n", + " * `plot()` - plota uma barra do gráfico." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "com.twosigma.beaker.javash.bkr5c156cc4.BarChart" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public class BarChart {\n", + " private boolean filled;\n", + " private char character;\n", + " \n", + " public BarChart(boolean filled, char character) {\n", + " this.filled = filled;\n", + " this.character = character;\n", + " }\n", + "\n", + " public void plot(int value) {\n", + " for (int v = 1; v < value; v++)\n", + " System.out.print((filled) ? character : ' ');\n", + " System.out.println(character);\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Usando objetos da classe `BarChart`\n", + "\n", + "Abaixo um exemplo de como objetos da classe `BarChart` podem ser usados." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "##########\n", + "############\n", + "########\n", + "\n", + " *\n", + " *\n", + " *\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BarChart bc1 = new BarChart(true, '#');\n", + "bc1.plot(10);\n", + "bc1.plot(12);\n", + "bc1.plot(8);\n", + "System.out.println();\n", + "\n", + "BarChart bc2 = new BarChart(false, '*');\n", + "bc2.plot(4);\n", + "bc2.plot(5);\n", + "bc2.plot(7);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classe `GeometricProgressionPre`\n", + "\n", + "Gera uma sequência de números que crescem em progressão geométrica.\n", + "\n", + "* Atributos\n", + " * `initial` - valor inicial da sequência;\n", + " * `ratio` - taxa de crescimento da progressão;\n", + " * `n` - quantidade de valores na sequência;\n", + " * `output` - referência para um objeto da classe `BarChart`.\n", + "* Métodos\n", + " * `present` - apresenta o gráfico exponencial (em conjunto com um objeto da classe `BarChart`)." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "com.twosigma.beaker.javash.bkr5c156cc4.GeometricProgressionPre" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public class GeometricProgressionPre {\n", + " private int initial,\n", + " ratio,\n", + " n;\n", + " private BarChart output;\n", + "\n", + " public GeometricProgressionPre(int initial, int ratio, int n, BarChart output) {\n", + " this.initial = initial;\n", + " this.ratio = ratio;\n", + " this.n = n;\n", + " this.output = output;\n", + " }\n", + "\n", + " public void present() {\n", + " if (output != null) {\n", + " int value = initial;\n", + " for (int s = 1; s <= n; s++) {\n", + " output.plot(value);\n", + " value *= ratio;\n", + " }\n", + " }\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Criando objetos associados\n", + "\n", + "Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart`. O objeto da classe `GeometricProgression` recebe uma referência do objeto `BarChart` no construtor para se relacionar com ele." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#\n", + "##\n", + "####\n", + "########\n", + "################\n", + "################################\n", + "################################################################\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BarChart bc = new BarChart(true, '#');\n", + "\n", + "GeometricProgressionPre gp = new GeometricProgressionPre(1, 2, 7, bc);\n", + "\n", + "gp.present();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Classe `GeometricProgression`\n", + "\n", + "No `GeometricProgressionPre` a associação com o objeto `BarChart` foi feita pelo construtor, o que limita as possibilidades de combinação, por exemplo, quando queremos conectar a mesma progressão com diversos dispositivos de saída.\n", + "\n", + "### Usando Conectores\n", + "\n", + "Uma abordagem derivada dos componentes considera usar a ideia de conector para ligar dois objetos usando o método `connect`.\n", + "\n", + "* Métodos adicional\n", + " * `conect` - conecta dois objetos informando a um deles (`GeometricProgression`) a identidade do outro `BarChart`." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "com.twosigma.beaker.javash.bkr5c156cc4.GeometricProgression" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public class GeometricProgression {\n", + " private int initial,\n", + " ratio,\n", + " n;\n", + " private BarChart output;\n", + "\n", + " public GeometricProgression(int initial, int ratio, int n) {\n", + " this.initial = initial;\n", + " this.ratio = ratio;\n", + " this.n = n;\n", + " this.output = null;\n", + " }\n", + " \n", + " public void connect(BarChart output) {\n", + " this.output = output;\n", + " }\n", + "\n", + " public void present() {\n", + " if (output != null) {\n", + " int value = initial;\n", + " for (int s = 1; s <= n; s++) {\n", + " output.plot(value);\n", + " value *= ratio;\n", + " }\n", + " }\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Criando e Conectando objetos - abordagem Push\n", + "\n", + "Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart` e os conecta através do novo método `connect`. Por ser uma abordagem Push, o `GeometricProgression` tem a referência do `BarChart` e envia (“empurra”) valores para ele." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#\n", + "##\n", + "####\n", + "########\n", + "################\n", + "################################\n", + "################################################################\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BarChart bc = new BarChart(true, '#');\n", + "\n", + "GeometricProgression gp = new GeometricProgression(1, 2, 7);\n", + "\n", + "gp.connect(bc);\n", + "gp.present();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conectando o objeto `GeometricProgression` com dois objetos `BarChart` - abordagem Push\n", + "\n", + "Exemplo conectando o mesmo objeto da classe `GeometricProgression` com dois objetos da classe `BarChart`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#\n", + "##\n", + "####\n", + "########\n", + "################\n", + "################################\n", + "################################################################\n", + "*\n", + " *\n", + " *\n", + " *\n", + " *\n", + " *\n", + " *\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "BarChart bc1 = new BarChart(true, '#');\n", + "BarChart bc2 = new BarChart(false, '*');\n", + "\n", + "GeometricProgression gp = new GeometricProgression(1, 2, 7);\n", + "\n", + "gp.connect(bc1);\n", + "gp.present();\n", + "\n", + "gp.connect(bc2);\n", + "gp.present();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tarefa do Gráfico de Segundo Grau\n", + "\n", + "## Função de segundo grau\n", + "\n", + "Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Push** e os enviem para um objeto `BarChart`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotagem de parábola\n", + "\n", + "Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Push**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Java", + "language": "java", + "name": "java" + }, + "language_info": { + "codemirror_mode": "text/x-java", + "file_extension": ".java", + "mimetype": "", + "name": "Java", + "nbconverter_exporter": "", + "version": "1.8.0_152-release" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": false, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/notebooks/pt/s04components/s01chart/s02pull.ipynb b/notebooks/pt/s04components/s01chart/s02pull.ipynb new file mode 100644 index 000000000..3d3eb54f1 --- /dev/null +++ b/notebooks/pt/s04components/s01chart/s02pull.ipynb @@ -0,0 +1,324 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Classes pre-Componentes / Abordagem Pull" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Componentes `GeometricProgresion` e `BarChart` trabalhando em conjunto via Pull\n", + "\n", + "Neste exemplo usaremos a abordagem **Pull**, ou seja, o objeto da classe `BarChart` controla todo o processo e solicita os valores para o objeto da classe `GeometricProgression`.\n", + "\n", + "## `GeometricProgression` abordagem Pull\n", + "\n", + "O `GeometricProgression` passa a atuar de forma passiva, aguardando que lhe solicitem valores através dos métodos `first` e `next`.\n", + "\n", + "Três modificações podem ser observadas:\n", + "1. a informação do número de valores plotados (`n`) passa para o `BarChart` que controla o processo;\n", + "2. o `BarChart` passa a ter a referência para o `GeometricProgression` que, por sua vez, não tem mais a referência e consequentemente o `connect`;\n", + "3. o método `present` que atuava ativamente gerando a sequência e enviando para o gráfico foi substituído por dois métodos (`first` e `next`) que atuam passivamente aguardando a solicitação de valor.\n", + "\n", + "## Classe `GeometricProgression`\n", + "\n", + "Gera uma sequência de números que crescem em progressão geométrica.\n", + "\n", + "* Atributos\n", + " * `initial` - valor inicial da sequência;\n", + " * `ratio` - taxa de crescimento da progressão;\n", + " * `current` - valor corrente (para controle interno).\n", + "* Métodos\n", + " * `first` - gera o primeiro valor da sequência e o retorna;\n", + " * `next` - gera o próximo valor da sequência (em relação à última solicitação) e o retorna." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "com.twosigma.beaker.javash.bkr703155f5.GeometricProgression" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public class GeometricProgression {\n", + " private int initial,\n", + " ratio;\n", + " private int current;\n", + " \n", + " public GeometricProgression(int initial, int ratio) {\n", + " this.initial = initial;\n", + " this.ratio = ratio;\n", + " current = initial;\n", + " }\n", + " \n", + " public int first() {\n", + " current = initial;\n", + " return current;\n", + " }\n", + " \n", + " public int next() {\n", + " current *= ratio;\n", + " return current;\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## `BarChart` abordagem Pull\n", + "\n", + "Três modificações podem ser observadas:\n", + "1. o método `plot` foi modificado -- em vez de plotar apenas uma barra, ele plota o gráfico inteiro, já que o `BarChart` controla o processo;\n", + "2. por causa da modificação (1), o `BarChart` passa a ter a informação de quantos valores serão plotados;\n", + "3. o `BarChart` passa a ter o método `connect`, já que ele guarda a referência para o objeto `GeometricProgression` para solicitar os valores.\n", + "\n", + "## `BarChart` Component\n", + "\n", + "Plota um gráfico de barras no console coletando ativamente dados a serem plotados.\n", + "\n", + "* Atributos\n", + " * `filled` - define se a plotagem será preenchida;\n", + " * `character` - define o caractere da plotagem;\n", + " * `n` - quantidade de valores na sequência;\n", + " * `sequence` - referência para um objeto da classe `BarChart`.\n", + "* Método\n", + " * `conect` - conecta dois objetos informando a um deles (`BarChart`) a identidade do outro `GeometricProgression`.\n", + " * `plot()` - plota o gráfico inteiro." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "com.twosigma.beaker.javash.bkr703155f5.BarChart" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "public class BarChart {\n", + " private boolean filled;\n", + " private char character;\n", + " private int n;\n", + " \n", + " private GeometricProgression sequence;\n", + " \n", + " public BarChart(boolean filled, char character, int n) {\n", + " this.filled = filled;\n", + " this.character = character;\n", + " this.n = n;\n", + " this.sequence = null;\n", + " }\n", + "\n", + " public void connect(GeometricProgression sequence) {\n", + " this.sequence = sequence;\n", + " }\n", + " \n", + " public void plot() {\n", + " if (sequence != null) {\n", + " int value = sequence.first();\n", + " for (int s = 1; s <= n; s++) {\n", + " for (int v = 1; v < value; v++)\n", + " System.out.print((filled) ? character : ' ');\n", + " System.out.println(character);\n", + " value = sequence.next();\n", + " }\n", + " }\n", + " }\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Criando e Conectando objetos - abordagem Pull\n", + "\n", + "Exemplo que cria um objeto da classe `GeometricProgression` outro da classe `BarChart` e os conecta através do novo método `connect`. Note que há uma inversão em relação a abordagem **Pull**. Aqui, o `BarChart` possui o método `connect` e se conecta ao `GeometricProgression` de quem ele solicitará os valores." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#\n", + "##\n", + "####\n", + "########\n", + "################\n", + "################################\n", + "################################################################\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "GeometricProgression gp = new GeometricProgression(1, 2);\n", + "\n", + "BarChart bc = new BarChart(true, '#', 7);\n", + "\n", + "bc.connect(gp);\n", + "bc.plot();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Conectando o objeto `GeometricProgression` com dois objetos `BarChart` - abordagem Pull\n", + "\n", + "Exemplo conectando o mesmo objeto da classe `GeometricProgression` com dois objetos da classe `BarChart`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "#\n", + "##\n", + "####\n", + "########\n", + "################\n", + "################################\n", + "################################################################\n", + "*\n", + " *\n", + " *\n", + " *\n", + " *\n", + " *\n", + " *\n" + ] + }, + { + "data": { + "text/plain": [ + "null" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "GeometricProgression gp = new GeometricProgression(1, 2);\n", + "\n", + "BarChart bc1 = new BarChart(true, '#', 7);\n", + "BarChart bc2 = new BarChart(false, '*', 7);\n", + "\n", + "bc1.connect(gp);\n", + "bc1.plot();\n", + "\n", + "bc2.connect(gp);\n", + "bc2.plot();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tarefa do Gráfico de Segundo Grau\n", + "\n", + "## Função de segundo grau\n", + "\n", + "Escreva uma classe `SecondDegree` cujos objetos produzam valores de uma função de segundo grau na abordagem **Pull**, ou seja, são produzidos sob demanda a partir de solicitação dos métodos `first` e `next`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plotagem de parábola\n", + "\n", + "Escreva um programa que conecte um objeto da classe `SecondDegree` a um objeto da classe `BarChart` de forma que seja plotada uma parábola na abordagem **Pull**. Por conta do comportamento da classe `BarChart`, a parábola será plotada virada, ou seja eixos X e Y trocados." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Java", + "language": "java", + "name": "java" + }, + "language_info": { + "codemirror_mode": "text/x-java", + "file_extension": ".java", + "mimetype": "", + "name": "Java", + "nbconverter_exporter": "", + "version": "1.8.0_152-release" + }, + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": false, + "sideBar": false, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": false, + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}