diff --git a/.gitignore b/.gitignore
index b39114fc3..1954f6d54 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,5 @@
# Jupyter Notebook
.ipynb_checkpoints
+
+# Java Compiled Files
+/eclipse/bin/
diff --git a/eclipse/.classpath b/eclipse/.classpath
new file mode 100644
index 000000000..a36280c78
--- /dev/null
+++ b/eclipse/.classpath
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/eclipse/.project b/eclipse/.project
new file mode 100644
index 000000000..3271b4a60
--- /dev/null
+++ b/eclipse/.project
@@ -0,0 +1,17 @@
+
+
+ component2learn
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/eclipse/.settings/org.eclipse.jdt.core.prefs b/eclipse/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..0fee6a9c4
--- /dev/null
+++ b/eclipse/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,15 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/eclipse/lib/xchart-3.5.2.jar b/eclipse/lib/xchart-3.5.2.jar
new file mode 100644
index 000000000..19b30f7d8
Binary files /dev/null and b/eclipse/lib/xchart-3.5.2.jar differ
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/AppAquaticConsole1.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/AppAquaticConsole1.java
new file mode 100644
index 000000000..84a28d78b
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/AppAquaticConsole1.java
@@ -0,0 +1,12 @@
+package pt.c06patterns.factory.s01aquatic;
+
+public class AppAquaticConsole1 {
+ public static void main(String[] args) {
+ ISeaAnimal aq1 = new FishConsole(),
+ aq2 = new CrabConsole();
+ IFishTank ft = new FishTankConsole();
+ ft.addSeaAnimal(aq1);
+ ft.addSeaAnimal(aq2);
+ ft.showFishTank();
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/CrabConsole.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/CrabConsole.java
new file mode 100644
index 000000000..862bf64fa
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/CrabConsole.java
@@ -0,0 +1,22 @@
+package pt.c06patterns.factory.s01aquatic;
+
+public class CrabConsole implements ISeaAnimal {
+ /*
+ o o
+ | |
+ /-----\
+ | |
+ \-----/
+ / / \ \
+ */
+
+
+ public String image() {
+ return " o o\n" +
+ " | |\n" +
+ "/-----\\\n" +
+ "| |\n" +
+ "\\-----/\n" +
+ "/ / \\ \\\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/FishConsole.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/FishConsole.java
new file mode 100644
index 000000000..cce5787f9
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/FishConsole.java
@@ -0,0 +1,14 @@
+package pt.c06patterns.factory.s01aquatic;
+
+public class FishConsole implements ISeaAnimal {
+ /* . _
+ |\/O\
+ |/\_/
+ */
+
+ public String image() {
+ return ". _\n" +
+ "|\\/O\\\n" +
+ "|/\\_/\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/FishTankConsole.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/FishTankConsole.java
new file mode 100644
index 000000000..b8758943c
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/FishTankConsole.java
@@ -0,0 +1,21 @@
+package pt.c06patterns.factory.s01aquatic;
+
+import java.util.ArrayList;
+
+public class FishTankConsole implements IFishTank {
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public void showFishTank() {
+ System.out.println("+-----------------+");
+ System.out.println("| |");
+ for (ISeaAnimal aq: aquaticList)
+ System.out.println(aq.image());
+ System.out.println("| |");
+ System.out.println("+-----------------+");
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/IFishTank.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/IFishTank.java
new file mode 100644
index 000000000..64ff5cab6
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/IFishTank.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s01aquatic;
+
+public interface IFishTank {
+ void addSeaAnimal(ISeaAnimal aquatic);
+ void showFishTank();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s01aquatic/ISeaAnimal.java b/eclipse/src/pt/c06patterns/factory/s01aquatic/ISeaAnimal.java
new file mode 100644
index 000000000..91cc84f2c
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s01aquatic/ISeaAnimal.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s01aquatic;
+
+public interface ISeaAnimal {
+ public String image();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/AppAquaticGUI1.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/AppAquaticGUI1.java
new file mode 100644
index 000000000..ac9e01d0d
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/AppAquaticGUI1.java
@@ -0,0 +1,12 @@
+package pt.c06patterns.factory.s02aquatic;
+
+public class AppAquaticGUI1 {
+ public static void main(String[] args) {
+ ISeaAnimal aq1 = new FishGUI(),
+ aq2 = new CrabGUI();
+ IFishTank ft = new FishTankGUI();
+ ft.addSeaAnimal(aq1);
+ ft.addSeaAnimal(aq2);
+ ft.showFishTank();
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/CrabGUI.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/CrabGUI.java
new file mode 100644
index 000000000..fa96fcac2
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/CrabGUI.java
@@ -0,0 +1,7 @@
+package pt.c06patterns.factory.s02aquatic;
+
+public class CrabGUI implements ISeaAnimal {
+ public String image() {
+ return CrabGUI.class.getResource(".").getPath() + "crab.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/FishGUI.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/FishGUI.java
new file mode 100644
index 000000000..33c104587
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/FishGUI.java
@@ -0,0 +1,7 @@
+package pt.c06patterns.factory.s02aquatic;
+
+public class FishGUI implements ISeaAnimal {
+ public String image() {
+ return FishGUI.class.getResource(".").getPath() + "fish.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/FishTankGUI.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/FishTankGUI.java
new file mode 100644
index 000000000..23dc83e4f
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/FishTankGUI.java
@@ -0,0 +1,41 @@
+package pt.c06patterns.factory.s02aquatic;
+
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+
+public class FishTankGUI extends JFrame implements IFishTank {
+ private static final long serialVersionUID = 8757083673686143226L;
+
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public FishTankGUI() {
+ super();
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ }
+
+ public void showFishTank() {
+ setSize(600, 300);
+
+ Container contentPane = getContentPane();
+ contentPane.setLayout(new FlowLayout());
+ contentPane.setBackground(new Color(192, 192, 255));
+
+ for (ISeaAnimal aq: aquaticList) {
+ ImageIcon imagem = new ImageIcon(aq.image());
+ JLabel campoImagem = new JLabel(imagem);
+ contentPane.add(campoImagem);
+ }
+
+ setVisible(true);
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/IFishTank.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/IFishTank.java
new file mode 100644
index 000000000..0cbd23635
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/IFishTank.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s02aquatic;
+
+public interface IFishTank {
+ public void addSeaAnimal(ISeaAnimal aquatic);
+ public void showFishTank();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/ISeaAnimal.java b/eclipse/src/pt/c06patterns/factory/s02aquatic/ISeaAnimal.java
new file mode 100644
index 000000000..daa7acd59
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s02aquatic/ISeaAnimal.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s02aquatic;
+
+public interface ISeaAnimal {
+ public String image();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/crab.png b/eclipse/src/pt/c06patterns/factory/s02aquatic/crab.png
new file mode 100644
index 000000000..809767619
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s02aquatic/crab.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s02aquatic/fish.png b/eclipse/src/pt/c06patterns/factory/s02aquatic/fish.png
new file mode 100644
index 000000000..dc49590d9
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s02aquatic/fish.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticConsole2.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticConsole2.java
new file mode 100644
index 000000000..27294d1e7
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticConsole2.java
@@ -0,0 +1,18 @@
+package pt.c06patterns.factory.s03aquatic;
+
+import pt.c06patterns.factory.s03aquatic.console.AquaticFactoryConsole;
+import pt.c06patterns.factory.s03aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class AppAquaticConsole2 {
+ public static void main(String[] args) {
+ IAquaticFactory factory = new AquaticFactoryConsole();
+ ISeaAnimal aq1 = factory.createSeaAnimal("fish"),
+ aq2 = factory.createSeaAnimal("crab");
+ IFishTank ft = factory.createFishTank("standard");
+ ft.addSeaAnimal(aq1);
+ ft.addSeaAnimal(aq2);
+ ft.showFishTank();
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticGUI2.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticGUI2.java
new file mode 100644
index 000000000..15af72eee
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/AppAquaticGUI2.java
@@ -0,0 +1,18 @@
+package pt.c06patterns.factory.s03aquatic;
+
+import pt.c06patterns.factory.s03aquatic.gui.AquaticFactoryGUI;
+import pt.c06patterns.factory.s03aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class AppAquaticGUI2 {
+ public static void main(String[] args) {
+ IAquaticFactory factory = new AquaticFactoryGUI();
+ ISeaAnimal aq1 = factory.createSeaAnimal("fish"),
+ aq2 = factory.createSeaAnimal("crab");
+ IFishTank ft = factory.createFishTank("standard");
+ ft.addSeaAnimal(aq1);
+ ft.addSeaAnimal(aq2);
+ ft.showFishTank();
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/console/AquaticFactoryConsole.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/AquaticFactoryConsole.java
new file mode 100644
index 000000000..0516d5792
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/AquaticFactoryConsole.java
@@ -0,0 +1,23 @@
+package pt.c06patterns.factory.s03aquatic.console;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class AquaticFactoryConsole implements IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type) {
+ ISeaAnimal seaAnimal = null;
+ if (type.equals("fish"))
+ seaAnimal = new FishConsole();
+ else if (type.equals("crab"))
+ seaAnimal = new CrabConsole();
+ return seaAnimal;
+ }
+
+ public IFishTank createFishTank(String type) {
+ IFishTank fishTank = null;
+ if (type.equals("standard"))
+ fishTank = new FishTankConsole();
+ return fishTank;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/console/CrabConsole.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/CrabConsole.java
new file mode 100644
index 000000000..d1dd022e2
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/CrabConsole.java
@@ -0,0 +1,24 @@
+package pt.c06patterns.factory.s03aquatic.console;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class CrabConsole implements ISeaAnimal {
+ /*
+ o o
+ | |
+ /-----\
+ | |
+ \-----/
+ / / \ \
+ */
+
+
+ public String image() {
+ return " o o\n" +
+ " | |\n" +
+ "/-----\\\n" +
+ "| |\n" +
+ "\\-----/\n" +
+ "/ / \\ \\\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishConsole.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishConsole.java
new file mode 100644
index 000000000..91a477929
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishConsole.java
@@ -0,0 +1,16 @@
+package pt.c06patterns.factory.s03aquatic.console;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class FishConsole implements ISeaAnimal {
+ /* . _
+ |\/O\
+ |/\_/
+ */
+
+ public String image() {
+ return ". _\n" +
+ "|\\/O\\\n" +
+ "|/\\_/\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishTankConsole.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishTankConsole.java
new file mode 100644
index 000000000..866d374da
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/console/FishTankConsole.java
@@ -0,0 +1,24 @@
+package pt.c06patterns.factory.s03aquatic.console;
+
+import java.util.ArrayList;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class FishTankConsole implements IFishTank {
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public void showFishTank() {
+ System.out.println("+-----------------+");
+ System.out.println("| |");
+ for (ISeaAnimal aq: aquaticList)
+ System.out.println(aq.image());
+ System.out.println("| |");
+ System.out.println("+-----------------+");
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/AquaticFactoryGUI.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/AquaticFactoryGUI.java
new file mode 100644
index 000000000..a1cf6e202
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/AquaticFactoryGUI.java
@@ -0,0 +1,23 @@
+package pt.c06patterns.factory.s03aquatic.gui;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class AquaticFactoryGUI implements IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type) {
+ ISeaAnimal seaAnimal = null;
+ if (type.equals("fish"))
+ seaAnimal = new FishGUI();
+ else if (type.equals("crab"))
+ seaAnimal = new CrabGUI();
+ return seaAnimal;
+ }
+
+ public IFishTank createFishTank(String type) {
+ IFishTank fishTank = null;
+ if (type.equals("standard"))
+ fishTank = new FishTankGUI();
+ return fishTank;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/CrabGUI.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/CrabGUI.java
new file mode 100644
index 000000000..e7494a8c0
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/CrabGUI.java
@@ -0,0 +1,9 @@
+package pt.c06patterns.factory.s03aquatic.gui;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class CrabGUI implements ISeaAnimal {
+ public String image() {
+ return CrabGUI.class.getResource(".").getPath() + "crab.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishGUI.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishGUI.java
new file mode 100644
index 000000000..f4f2f286c
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishGUI.java
@@ -0,0 +1,9 @@
+package pt.c06patterns.factory.s03aquatic.gui;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class FishGUI implements ISeaAnimal {
+ public String image() {
+ return FishGUI.class.getResource(".").getPath() + "fish.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishTankGUI.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishTankGUI.java
new file mode 100644
index 000000000..8afc5839e
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/FishTankGUI.java
@@ -0,0 +1,44 @@
+package pt.c06patterns.factory.s03aquatic.gui;
+
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+
+import pt.c06patterns.factory.s03aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s03aquatic.interfaces.ISeaAnimal;
+
+public class FishTankGUI extends JFrame implements IFishTank {
+ private static final long serialVersionUID = 8757083673686143226L;
+
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public FishTankGUI() {
+ super();
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ }
+
+ public void showFishTank() {
+ setSize(600, 300);
+
+ Container contentPane = getContentPane();
+ contentPane.setLayout(new FlowLayout());
+ contentPane.setBackground(new Color(192, 192, 255));
+
+ for (ISeaAnimal aq: aquaticList) {
+ ImageIcon imagem = new ImageIcon(aq.image());
+ JLabel campoImagem = new JLabel(imagem);
+ contentPane.add(campoImagem);
+ }
+
+ setVisible(true);
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/crab.png b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/crab.png
new file mode 100644
index 000000000..809767619
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/crab.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/fish.png b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/fish.png
new file mode 100644
index 000000000..dc49590d9
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s03aquatic/gui/fish.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IAquaticFactory.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IAquaticFactory.java
new file mode 100644
index 000000000..5effa9eca
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IAquaticFactory.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s03aquatic.interfaces;
+
+public interface IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type);
+ public IFishTank createFishTank(String type);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IFishTank.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IFishTank.java
new file mode 100644
index 000000000..e1d760824
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/IFishTank.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s03aquatic.interfaces;
+
+public interface IFishTank {
+ void addSeaAnimal(ISeaAnimal aquatic);
+ void showFishTank();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/ISeaAnimal.java b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/ISeaAnimal.java
new file mode 100644
index 000000000..a26fa927b
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s03aquatic/interfaces/ISeaAnimal.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s03aquatic.interfaces;
+
+public interface ISeaAnimal {
+ public String image();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/AppAquatic4.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/AppAquatic4.java
new file mode 100644
index 000000000..b41ca5dde
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/AppAquatic4.java
@@ -0,0 +1,24 @@
+package pt.c06patterns.factory.s04aquatic;
+
+import java.util.Scanner;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s04aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class AppAquatic4 {
+ public static void main(String[] args) {
+ System.out.print("Digite o tipo de apresentação (console ou gui): ");
+ Scanner teclado = new Scanner(System.in);
+ String type = teclado.nextLine();
+ teclado.close();
+
+ IAquaticFactory factory = AquaticAbstractFactory.createFactory(type);
+ ISeaAnimal aq1 = factory.createSeaAnimal("fish"),
+ aq2 = factory.createSeaAnimal("crab");
+ IFishTank ft = factory.createFishTank("standard");
+ ft.addSeaAnimal(aq1);
+ ft.addSeaAnimal(aq2);
+ ft.showFishTank();
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/AquaticAbstractFactory.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/AquaticAbstractFactory.java
new file mode 100644
index 000000000..2d243d4a5
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/AquaticAbstractFactory.java
@@ -0,0 +1,16 @@
+package pt.c06patterns.factory.s04aquatic;
+
+import pt.c06patterns.factory.s04aquatic.console.AquaticFactoryConsole;
+import pt.c06patterns.factory.s04aquatic.gui.AquaticFactoryGUI;
+import pt.c06patterns.factory.s04aquatic.interfaces.IAquaticFactory;
+
+public class AquaticAbstractFactory {
+ public static IAquaticFactory createFactory(String type) {
+ IAquaticFactory aquaticFactory = null;
+ if (type.equals("console"))
+ aquaticFactory = new AquaticFactoryConsole();
+ else if (type.equals("gui"))
+ aquaticFactory = new AquaticFactoryGUI();
+ return aquaticFactory;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/console/AquaticFactoryConsole.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/AquaticFactoryConsole.java
new file mode 100644
index 000000000..6239179e7
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/AquaticFactoryConsole.java
@@ -0,0 +1,23 @@
+package pt.c06patterns.factory.s04aquatic.console;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s04aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class AquaticFactoryConsole implements IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type) {
+ ISeaAnimal seaAnimal = null;
+ if (type.equals("fish"))
+ seaAnimal = new FishConsole();
+ else if (type.equals("crab"))
+ seaAnimal = new CrabConsole();
+ return seaAnimal;
+ }
+
+ public IFishTank createFishTank(String type) {
+ IFishTank fishTank = null;
+ if (type.equals("standard"))
+ fishTank = new FishTankConsole();
+ return fishTank;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/console/CrabConsole.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/CrabConsole.java
new file mode 100644
index 000000000..16824cee5
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/CrabConsole.java
@@ -0,0 +1,24 @@
+package pt.c06patterns.factory.s04aquatic.console;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class CrabConsole implements ISeaAnimal {
+ /*
+ o o
+ | |
+ /-----\
+ | |
+ \-----/
+ / / \ \
+ */
+
+
+ public String image() {
+ return " o o\n" +
+ " | |\n" +
+ "/-----\\\n" +
+ "| |\n" +
+ "\\-----/\n" +
+ "/ / \\ \\\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishConsole.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishConsole.java
new file mode 100644
index 000000000..cde7972e3
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishConsole.java
@@ -0,0 +1,16 @@
+package pt.c06patterns.factory.s04aquatic.console;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class FishConsole implements ISeaAnimal {
+ /* . _
+ |\/O\
+ |/\_/
+ */
+
+ public String image() {
+ return ". _\n" +
+ "|\\/O\\\n" +
+ "|/\\_/\n";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishTankConsole.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishTankConsole.java
new file mode 100644
index 000000000..795d896bf
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/console/FishTankConsole.java
@@ -0,0 +1,24 @@
+package pt.c06patterns.factory.s04aquatic.console;
+
+import java.util.ArrayList;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class FishTankConsole implements IFishTank {
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public void showFishTank() {
+ System.out.println("+-----------------+");
+ System.out.println("| |");
+ for (ISeaAnimal aq: aquaticList)
+ System.out.println(aq.image());
+ System.out.println("| |");
+ System.out.println("+-----------------+");
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/AquaticFactoryGUI.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/AquaticFactoryGUI.java
new file mode 100644
index 000000000..7acfd71f5
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/AquaticFactoryGUI.java
@@ -0,0 +1,23 @@
+package pt.c06patterns.factory.s04aquatic.gui;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.IAquaticFactory;
+import pt.c06patterns.factory.s04aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class AquaticFactoryGUI implements IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type) {
+ ISeaAnimal seaAnimal = null;
+ if (type.equals("fish"))
+ seaAnimal = new FishGUI();
+ else if (type.equals("crab"))
+ seaAnimal = new CrabGUI();
+ return seaAnimal;
+ }
+
+ public IFishTank createFishTank(String type) {
+ IFishTank fishTank = null;
+ if (type.equals("standard"))
+ fishTank = new FishTankGUI();
+ return fishTank;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/CrabGUI.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/CrabGUI.java
new file mode 100644
index 000000000..614c7ad64
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/CrabGUI.java
@@ -0,0 +1,9 @@
+package pt.c06patterns.factory.s04aquatic.gui;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class CrabGUI implements ISeaAnimal {
+ public String image() {
+ return CrabGUI.class.getResource(".").getPath() + "crab.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishGUI.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishGUI.java
new file mode 100644
index 000000000..72a812ca2
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishGUI.java
@@ -0,0 +1,9 @@
+package pt.c06patterns.factory.s04aquatic.gui;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class FishGUI implements ISeaAnimal {
+ public String image() {
+ return FishGUI.class.getResource(".").getPath() + "fish.png";
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishTankGUI.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishTankGUI.java
new file mode 100644
index 000000000..f5f76791f
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/FishTankGUI.java
@@ -0,0 +1,44 @@
+package pt.c06patterns.factory.s04aquatic.gui;
+
+import java.awt.Color;
+import java.awt.Container;
+import java.awt.FlowLayout;
+import java.util.ArrayList;
+
+import javax.swing.ImageIcon;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+
+import pt.c06patterns.factory.s04aquatic.interfaces.IFishTank;
+import pt.c06patterns.factory.s04aquatic.interfaces.ISeaAnimal;
+
+public class FishTankGUI extends JFrame implements IFishTank {
+ private static final long serialVersionUID = 8757083673686143226L;
+
+ ArrayList aquaticList = new ArrayList();
+
+ public void addSeaAnimal(ISeaAnimal aquatic) {
+ aquaticList.add(aquatic);
+ }
+
+ public FishTankGUI() {
+ super();
+ setDefaultCloseOperation(EXIT_ON_CLOSE);
+ }
+
+ public void showFishTank() {
+ setSize(600, 300);
+
+ Container contentPane = getContentPane();
+ contentPane.setLayout(new FlowLayout());
+ contentPane.setBackground(new Color(192, 192, 255));
+
+ for (ISeaAnimal aq: aquaticList) {
+ ImageIcon imagem = new ImageIcon(aq.image());
+ JLabel campoImagem = new JLabel(imagem);
+ contentPane.add(campoImagem);
+ }
+
+ setVisible(true);
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/crab.png b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/crab.png
new file mode 100644
index 000000000..809767619
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/crab.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/fish.png b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/fish.png
new file mode 100644
index 000000000..dc49590d9
Binary files /dev/null and b/eclipse/src/pt/c06patterns/factory/s04aquatic/gui/fish.png differ
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IAquaticFactory.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IAquaticFactory.java
new file mode 100644
index 000000000..23a5c8de2
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IAquaticFactory.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s04aquatic.interfaces;
+
+public interface IAquaticFactory {
+ public ISeaAnimal createSeaAnimal(String type);
+ public IFishTank createFishTank(String type);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IFishTank.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IFishTank.java
new file mode 100644
index 000000000..b0994722d
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/IFishTank.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s04aquatic.interfaces;
+
+public interface IFishTank {
+ void addSeaAnimal(ISeaAnimal aquatic);
+ void showFishTank();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/ISeaAnimal.java b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/ISeaAnimal.java
new file mode 100644
index 000000000..cf164960c
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s04aquatic/interfaces/ISeaAnimal.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s04aquatic.interfaces;
+
+public interface ISeaAnimal {
+ public String image();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/App05ChartSequence.java b/eclipse/src/pt/c06patterns/factory/s10components/App05ChartSequence.java
new file mode 100644
index 000000000..7bd94e4d7
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/App05ChartSequence.java
@@ -0,0 +1,36 @@
+package pt.c06patterns.factory.s10components;
+
+import java.util.Scanner;
+
+import pt.c06patterns.factory.s10components.chart.BarChartFactory;
+import pt.c06patterns.factory.s10components.chart.IBarChart;
+import pt.c06patterns.factory.s10components.chart.exception.PlotException;
+import pt.c06patterns.factory.s10components.sequence.IMathRatioSequence;
+import pt.c06patterns.factory.s10components.sequence.SequenceFactory;
+
+public class App05ChartSequence {
+ public static void main(String args[]) {
+ System.out.print("Progression type (arithmetic or geometric): ");
+ Scanner keyboard = new Scanner(System.in);
+ String sequenceType = keyboard.nextLine();
+
+ System.out.print("Chart type (console ou graphic): ");
+ String chartType = keyboard.nextLine();
+
+ keyboard.close();
+
+ IMathRatioSequence gp = SequenceFactory.createSequence(sequenceType);
+ gp.setInitial(1);
+ gp.setRatio(2);
+
+ try {
+ IBarChart bcg = BarChartFactory.create(chartType);
+ bcg.setFilled(true);
+ bcg.setN(7);
+ bcg.connect(gp);
+ bcg.plot();
+ } catch (PlotException error) {
+ System.err.println("*** Error: " + error.getMessage());
+ }
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChart.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChart.java
new file mode 100644
index 000000000..ce90e87ae
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChart.java
@@ -0,0 +1,37 @@
+package pt.c06patterns.factory.s10components.chart;
+
+import pt.c06patterns.factory.s10components.sequence.ISequence;
+
+public abstract class BarChart implements IBarChart {
+ protected boolean filled;
+ protected int n;
+
+ protected ISequence sequence;
+
+ public BarChart() {
+ filled = true;
+ n = 3;
+ }
+
+ public boolean isFilled() {
+ return filled;
+ }
+
+ public void setFilled(boolean filled) {
+ this.filled = filled;
+ }
+
+ public int getN() {
+ return n;
+ }
+
+ public void setN(int n) {
+ this.n = n;
+ }
+
+ public void connect(ISequence sequence) {
+ this.sequence = sequence;
+ }
+
+ public abstract void plot();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChartFactory.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChartFactory.java
new file mode 100644
index 000000000..aafd72ceb
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/BarChartFactory.java
@@ -0,0 +1,16 @@
+package pt.c06patterns.factory.s10components.chart;
+
+public class BarChartFactory {
+
+ public static IBarChart create(String type) {
+ IBarChart chart = null;
+
+ if (type.equalsIgnoreCase("console"))
+ chart = new ConsoleBarChart();
+ else if (type.equalsIgnoreCase("graphic"))
+ chart = new GraphicBarChart();
+
+ return chart;
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/ConsoleBarChart.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/ConsoleBarChart.java
new file mode 100644
index 000000000..f272a55e9
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/ConsoleBarChart.java
@@ -0,0 +1,41 @@
+package pt.c06patterns.factory.s10components.chart;
+
+import pt.c06patterns.factory.s10components.chart.exception.InvalidBlankChar;
+import pt.c06patterns.factory.s10components.chart.exception.UnsupportedNegativeNumber;
+
+public class ConsoleBarChart extends BarChart {
+ private char character;
+
+ public ConsoleBarChart() {
+ super();
+ character = '*';
+ }
+
+ public char getCharacter() {
+ return character;
+ }
+
+ public void setCharacter(char character) throws InvalidBlankChar {
+ if (character == ' ')
+ throw new InvalidBlankChar("the chart does not support blank character");
+ this.character = character;
+ }
+
+ public void plot() {
+ if (sequence != null) {
+ int value = sequence.first();
+ for (int s = 1; s <= n; s++) {
+ if (value > 0) {
+ for (int v = 1; v < value; v++)
+ System.out.print((filled) ? character : ' ');
+ System.out.print(character);
+ } else if (value < 0) {
+ System.out.println("?");
+ throw new UnsupportedNegativeNumber("the chart does not support a negative number");
+ }
+ System.out.println();
+ value = sequence.next();
+ }
+ }
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/GraphicBarChart.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/GraphicBarChart.java
new file mode 100644
index 000000000..44c6419c7
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/GraphicBarChart.java
@@ -0,0 +1,40 @@
+package pt.c06patterns.factory.s10components.chart;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.knowm.xchart.CategoryChart;
+import org.knowm.xchart.CategoryChartBuilder;
+import org.knowm.xchart.SwingWrapper;
+
+public class GraphicBarChart extends BarChart {
+
+ public void plot() {
+ // Create Chart
+ CategoryChart chart =
+ new CategoryChartBuilder().width(800).height(600).
+ title("Chart").xAxisTitle("X").yAxisTitle("Y").build();
+
+ // Customize Chart
+ chart.getStyler().setChartTitleVisible(false);
+ chart.getStyler().setLegendVisible(false);
+ chart.getStyler().setAxisTitlesVisible(false);
+ chart.getStyler().setXAxisDecimalPattern("0");
+
+ // Series
+ List xData = new ArrayList();
+ List yData = new ArrayList();
+ if (sequence != null) {
+ int value = sequence.first();
+ for (int s = 1; s <= n; s++) {
+ xData.add(s);
+ yData.add(value);
+ value = sequence.next();
+ }
+ }
+ chart.addSeries("series", xData, yData);
+
+ new SwingWrapper(chart).displayChart();
+ }
+
+}
\ No newline at end of file
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChart.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChart.java
new file mode 100644
index 000000000..c16f685d2
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChart.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s10components.chart;
+
+public interface IBarChart
+ extends IChart, IRSequence, IBarChartProperties {
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChartProperties.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChartProperties.java
new file mode 100644
index 000000000..bd26e9e85
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/IBarChartProperties.java
@@ -0,0 +1,9 @@
+package pt.c06patterns.factory.s10components.chart;
+
+public interface IBarChartProperties {
+ public boolean isFilled();
+ public void setFilled(boolean filled);
+
+ public int getN();
+ public void setN(int n);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/IChart.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/IChart.java
new file mode 100644
index 000000000..1a5668855
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/IChart.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s10components.chart;
+
+public interface IChart {
+ public void plot();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/IRSequence.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/IRSequence.java
new file mode 100644
index 000000000..e1950680c
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/IRSequence.java
@@ -0,0 +1,7 @@
+package pt.c06patterns.factory.s10components.chart;
+
+import pt.c06patterns.factory.s10components.sequence.ISequence;
+
+public interface IRSequence {
+ public void connect(ISequence sequence);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/InvalidBlankChar.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/InvalidBlankChar.java
new file mode 100644
index 000000000..2e72ab085
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/InvalidBlankChar.java
@@ -0,0 +1,15 @@
+package pt.c06patterns.factory.s10components.chart.exception;
+
+public class InvalidBlankChar extends PlotException {
+
+ private static final long serialVersionUID = -9219514119468607139L;
+
+ public InvalidBlankChar() {
+ super();
+ }
+
+ public InvalidBlankChar(String message) {
+ super(message);
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/PlotException.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/PlotException.java
new file mode 100644
index 000000000..6fd43fa2a
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/PlotException.java
@@ -0,0 +1,15 @@
+package pt.c06patterns.factory.s10components.chart.exception;
+
+public class PlotException extends RuntimeException {
+
+ private static final long serialVersionUID = 2727260512165247433L;
+
+ public PlotException() {
+ super();
+ }
+
+ public PlotException(String message) {
+ super(message);
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/UnsupportedNegativeNumber.java b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/UnsupportedNegativeNumber.java
new file mode 100644
index 000000000..32b2058aa
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/chart/exception/UnsupportedNegativeNumber.java
@@ -0,0 +1,15 @@
+package pt.c06patterns.factory.s10components.chart.exception;
+
+public class UnsupportedNegativeNumber extends PlotException {
+
+ private static final long serialVersionUID = -1248911490628763059L;
+
+ public UnsupportedNegativeNumber() {
+ super();
+ }
+
+ public UnsupportedNegativeNumber(String message) {
+ super(message);
+ }
+
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/ArithmeticProgression.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ArithmeticProgression.java
new file mode 100644
index 000000000..2ce240b0f
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ArithmeticProgression.java
@@ -0,0 +1,39 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public class ArithmeticProgression implements IMathRatioSequence {
+ private int initial,
+ ratio;
+ private int current;
+
+ public ArithmeticProgression() {
+ initial = 1;
+ ratio = 1;
+ 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/eclipse/src/pt/c06patterns/factory/s10components/sequence/Fibonacci.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/Fibonacci.java
new file mode 100644
index 000000000..2738f847f
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/Fibonacci.java
@@ -0,0 +1,42 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public class Fibonacci implements IMathSequence {
+ private int initialCurrent, initialNext;
+ private int current, next;
+
+ public Fibonacci() {
+ initialCurrent = 0;
+ initialNext = 1;
+ current = 0;
+ next = 1;
+ }
+
+ public int getInitial() {
+ return initialCurrent;
+ }
+
+ public void setInitial(int initial) {
+ current = 0;
+ next = 1;
+ while (initial > current) {
+ int sum = current + next;
+ current = next;
+ next = sum;
+ }
+ initialCurrent = current;
+ initialNext = next;
+ }
+
+ public int first() {
+ current = initialCurrent;
+ next = initialNext;
+ return current;
+ }
+
+ public int next() {
+ int sum = current + next;
+ current = next;
+ next = sum;
+ return current;
+ }
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/GeometricProgression.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/GeometricProgression.java
new file mode 100644
index 000000000..8597feb90
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/GeometricProgression.java
@@ -0,0 +1,39 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public class GeometricProgression implements IMathRatioSequence {
+ 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/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathRatioSequence.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathRatioSequence.java
new file mode 100644
index 000000000..61b3080a7
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathRatioSequence.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public interface IMathRatioSequence
+ extends IMathSequence, ISeqRatioProperties {
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathSequence.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathSequence.java
new file mode 100644
index 000000000..4ce5628fb
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/IMathSequence.java
@@ -0,0 +1,5 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public interface IMathSequence
+ extends ISequence, ISeqInitialProperties {
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqInitialProperties.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqInitialProperties.java
new file mode 100644
index 000000000..a53664b40
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqInitialProperties.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public interface ISeqInitialProperties {
+ public int getInitial();
+ public void setInitial(int initial);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqRatioProperties.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqRatioProperties.java
new file mode 100644
index 000000000..213ad0a7b
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISeqRatioProperties.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public interface ISeqRatioProperties {
+ public int getRatio();
+ public void setRatio(int ratio);
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISequence.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISequence.java
new file mode 100644
index 000000000..37365a120
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/ISequence.java
@@ -0,0 +1,6 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public interface ISequence {
+ public int first();
+ public int next();
+}
diff --git a/eclipse/src/pt/c06patterns/factory/s10components/sequence/SequenceFactory.java b/eclipse/src/pt/c06patterns/factory/s10components/sequence/SequenceFactory.java
new file mode 100644
index 000000000..40054b639
--- /dev/null
+++ b/eclipse/src/pt/c06patterns/factory/s10components/sequence/SequenceFactory.java
@@ -0,0 +1,21 @@
+package pt.c06patterns.factory.s10components.sequence;
+
+public class SequenceFactory {
+ @SuppressWarnings("unchecked")
+ public static IType createSequence(String type) {
+ IType sequence = null;
+
+ try {
+ if (type.equalsIgnoreCase("fibonacci"))
+ sequence = (IType)new Fibonacci();
+ else if (type.equalsIgnoreCase("arithmetic"))
+ sequence = (IType)new ArithmeticProgression();
+ else if (type.equalsIgnoreCase("geometric"))
+ sequence = (IType)new GeometricProgression();
+ } catch (ClassCastException e) {
+ e.printStackTrace();
+ }
+
+ return sequence;
+ }
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java
new file mode 100644
index 000000000..903d6e55e
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/App01ChartSequence.java
@@ -0,0 +1,22 @@
+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/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java
new file mode 100644
index 000000000..32fcd1b14
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/BarChart.java
@@ -0,0 +1,57 @@
+package pt.c08componentes.s01chartseq.s01start.chart;
+
+import pt.c08componentes.s01chartseq.s01start.sequence.ISequence;
+
+public class BarChart implements IBarChart {
+ 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/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java
new file mode 100644
index 000000000..2ea3a6e0a
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChart.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s01start.chart;
+
+public interface IBarChart
+ extends IChart, IBarChartProperties, IRSequence {
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java
new file mode 100644
index 000000000..125e25c74
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IBarChartProperties.java
@@ -0,0 +1,12 @@
+package pt.c08componentes.s01chartseq.s01start.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/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java
new file mode 100644
index 000000000..a8faba075
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IChart.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s01start.chart;
+
+public interface IChart {
+ public void plot();
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java
new file mode 100644
index 000000000..e52a8ebac
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/chart/IRSequence.java
@@ -0,0 +1,7 @@
+package pt.c08componentes.s01chartseq.s01start.chart;
+
+import pt.c08componentes.s01chartseq.s01start.sequence.ISequence;
+
+public interface IRSequence {
+ public void connect(ISequence sequence);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java
new file mode 100644
index 000000000..28dc6cdc7
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/GeometricProgression.java
@@ -0,0 +1,39 @@
+package pt.c08componentes.s01chartseq.s01start.sequence;
+
+public class GeometricProgression implements IGeometricProgression {
+ 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/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java
new file mode 100644
index 000000000..fed89acf0
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgression.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s01start.sequence;
+
+public interface IGeometricProgression
+ extends ISequence, IGeometricProgressionProperties {
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java
new file mode 100644
index 000000000..3d4fcb590
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/IGeometricProgressionProperties.java
@@ -0,0 +1,9 @@
+package pt.c08componentes.s01chartseq.s01start.sequence;
+
+public interface IGeometricProgressionProperties {
+ public int getInitial();
+ public void setInitial(int initial);
+
+ public int getRatio();
+ public void setRatio(int ratio);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java
new file mode 100644
index 000000000..8e53c1923
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s01start/sequence/ISequence.java
@@ -0,0 +1,6 @@
+package pt.c08componentes.s01chartseq.s01start.sequence;
+
+public interface ISequence {
+ public int first();
+ public int next();
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java
new file mode 100644
index 000000000..9f8b4f2d0
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/App02ChartSequence.java
@@ -0,0 +1,37 @@
+package pt.c08componentes.s01chartseq.s02sequences;
+
+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;
+
+public class App02ChartSequence {
+ public static void main(String args[]) {
+ System.out.println("Geometric Progression:");
+
+ IMathRatioSequence gp = new GeometricProgression();
+ gp.setInitial(1);
+ gp.setRatio(2);
+
+ IBarChart bcg = new GraphicBarChart();
+ bcg.setFilled(true);
+ bcg.setN(5);
+
+ bcg.connect(gp);
+ bcg.plot();
+
+ System.out.println("\nFibonacci Sequence:");
+
+ IMathSequence fb = new Fibonacci();
+ fb.setInitial(1);
+
+ IBarChart bcf = new GraphicBarChart();
+ bcf.setFilled(true);
+ bcf.setN(5);
+
+ bcf.connect(fb);
+ bcf.plot();
+ }
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java
new file mode 100644
index 000000000..e322ba5a2
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/BarChart.java
@@ -0,0 +1,37 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+import pt.c08componentes.s01chartseq.s02sequences.sequence.ISequence;
+
+public abstract class BarChart implements IBarChart {
+ protected boolean filled;
+ protected int n;
+
+ protected ISequence sequence;
+
+ public BarChart() {
+ filled = true;
+ n = 3;
+ }
+
+ public boolean isFilled() {
+ return filled;
+ }
+
+ public void setFilled(boolean filled) {
+ this.filled = filled;
+ }
+
+ public int getN() {
+ return n;
+ }
+
+ public void setN(int n) {
+ this.n = n;
+ }
+
+ public void connect(ISequence sequence) {
+ this.sequence = sequence;
+ }
+
+ public abstract void plot();
+}
\ No newline at end of file
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java
new file mode 100644
index 000000000..603f36a25
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/ConsoleBarChart.java
@@ -0,0 +1,33 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+public class ConsoleBarChart extends BarChart {
+ private char character;
+
+ public ConsoleBarChart() {
+ super();
+ character = '*';
+ }
+
+ public char getCharacter() {
+ return character;
+ }
+
+ public void setCharacter(char character) {
+ this.character = character;
+ }
+
+ public void plot() {
+ if (sequence != null) {
+ int value = sequence.first();
+ for (int s = 1; s <= n; s++) {
+ if (value > 0) {
+ for (int v = 1; v < value; v++)
+ System.out.print((filled) ? character : ' ');
+ System.out.print(character);
+ }
+ System.out.println();
+ value = sequence.next();
+ }
+ }
+ }
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java
new file mode 100644
index 000000000..fce36dbfa
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/GraphicBarChart.java
@@ -0,0 +1,40 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.knowm.xchart.CategoryChart;
+import org.knowm.xchart.CategoryChartBuilder;
+import org.knowm.xchart.SwingWrapper;
+
+public class GraphicBarChart extends BarChart {
+
+ public void plot() {
+ // Create Chart
+ CategoryChart chart =
+ new CategoryChartBuilder().width(800).height(600).
+ title("Chart").xAxisTitle("X").yAxisTitle("Y").build();
+
+ // Customize Chart
+ chart.getStyler().setChartTitleVisible(false);
+ chart.getStyler().setLegendVisible(false);
+ chart.getStyler().setAxisTitlesVisible(false);
+ chart.getStyler().setXAxisDecimalPattern("0");
+
+ // Series
+ List xData = new ArrayList();
+ List yData = new ArrayList();
+ if (sequence != null) {
+ int value = sequence.first();
+ for (int s = 1; s <= n; s++) {
+ xData.add(s);
+ yData.add(value);
+ value = sequence.next();
+ }
+ }
+ chart.addSeries("series", xData, yData);
+
+ new SwingWrapper(chart).displayChart();
+ }
+
+ }
\ No newline at end of file
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java
new file mode 100644
index 000000000..d8dcba4a2
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChart.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+public interface IBarChart
+ extends IChart, IRSequence, IBarChartProperties {
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java
new file mode 100644
index 000000000..a01ae1109
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IBarChartProperties.java
@@ -0,0 +1,9 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+public interface IBarChartProperties {
+ public boolean isFilled();
+ public void setFilled(boolean filled);
+
+ public int getN();
+ public void setN(int n);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java
new file mode 100644
index 000000000..f6be0ea27
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IChart.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+public interface IChart {
+ public void plot();
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java
new file mode 100644
index 000000000..94a5b2d5c
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/chart/IRSequence.java
@@ -0,0 +1,7 @@
+package pt.c08componentes.s01chartseq.s02sequences.chart;
+
+import pt.c08componentes.s01chartseq.s02sequences.sequence.ISequence;
+
+public interface IRSequence {
+ public void connect(ISequence sequence);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java
new file mode 100644
index 000000000..cbf3594c4
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ArithmeticProgression.java
@@ -0,0 +1,41 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+import pt.c06patterns.factory.s10components.sequence.IMathRatioSequence;
+
+public class ArithmeticProgression implements IMathRatioSequence {
+ private int initial,
+ ratio;
+ private int current;
+
+ public ArithmeticProgression() {
+ initial = 1;
+ ratio = 1;
+ 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/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java
new file mode 100644
index 000000000..df18d4138
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/Fibonacci.java
@@ -0,0 +1,42 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public class Fibonacci implements IMathSequence {
+ private int initialCurrent, initialNext;
+ private int current, next;
+
+ public Fibonacci() {
+ initialCurrent = 0;
+ initialNext = 1;
+ current = 0;
+ next = 1;
+ }
+
+ public int getInitial() {
+ return initialCurrent;
+ }
+
+ public void setInitial(int initial) {
+ current = 0;
+ next = 1;
+ while (initial > current) {
+ int sum = current + next;
+ current = next;
+ next = sum;
+ }
+ initialCurrent = current;
+ initialNext = next;
+ }
+
+ public int first() {
+ current = initialCurrent;
+ next = initialNext;
+ return current;
+ }
+
+ public int next() {
+ int sum = current + next;
+ current = next;
+ next = sum;
+ return current;
+ }
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java
new file mode 100644
index 000000000..2d5ed8eb0
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/GeometricProgression.java
@@ -0,0 +1,39 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public class GeometricProgression implements IMathRatioSequence {
+ 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/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java
new file mode 100644
index 000000000..902000c8e
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathRatioSequence.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public interface IMathRatioSequence
+ extends IMathSequence, ISeqRatioProperties {
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java
new file mode 100644
index 000000000..ae1db7ae2
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/IMathSequence.java
@@ -0,0 +1,5 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public interface IMathSequence
+ extends ISequence, ISeqInitialProperties {
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java
new file mode 100644
index 000000000..3ee72042d
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqInitialProperties.java
@@ -0,0 +1,6 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public interface ISeqInitialProperties {
+ public int getInitial();
+ public void setInitial(int initial);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java
new file mode 100644
index 000000000..1c8d98ce5
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISeqRatioProperties.java
@@ -0,0 +1,6 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public interface ISeqRatioProperties {
+ public int getRatio();
+ public void setRatio(int ratio);
+}
diff --git a/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java
new file mode 100644
index 000000000..c1a0e2915
--- /dev/null
+++ b/eclipse/src/pt/c08componentes/s01chartseq/s02sequences/sequence/ISequence.java
@@ -0,0 +1,6 @@
+package pt.c08componentes.s01chartseq.s02sequences.sequence;
+
+public interface ISequence {
+ public int first();
+ public int next();
+}
diff --git a/templates/2021/lab02/README.md b/templates/2021/lab02/README.md
index 49161c5b4..b41500cb7 100644
--- a/templates/2021/lab02/README.md
+++ b/templates/2021/lab02/README.md
@@ -1,34 +1,20 @@
-# Modelo para Apresentação do Lab01 - Data Flow
+# Modelo para Apresentação do Lab02 - Data Flow & MVC
Estrutura de pastas:
~~~
├── README.md <- arquivo apresentando a tarefa
│
-├── images <- arquivos de imagens usadas no documento
-│
-└── orange <- arquivos do Orange
+└── notebook <- arquivo do notebook
~~~
# Aluno
* ``
-# Tarefa 1 - Workflow para Recomendação de Zombie Meals
-
-## Imagem do Projeto
-> Coloque uma imagem da captura de tela com o projeto do Orange (veja exemplo abaixo).
-![Workflow Orange](images/orange-zombie-meals-prediction.png)
-
-## Arquivo do Projeto
-> Coloque um link para o arquivo em Orange.
-
-# Tarefa 2 - Projeto de Composição para Venda e Recomendação
-
-## Diagrama de Componentes
+## Tarefas da parte 1 sobre criação de componentes
-> Imagem (`PNG`) do diagrama de componentes (veja exemplo abaixo).
-![Diagrama Venda](images/diagrama-componentes-venda.png)
+> Coloque um link para o arquivo do notebook com a resolução das duas tarefas do notebook `components-1-chart-single-class.ipynb`. Ele estará dentro da pasta `notebook`.
-## Texto Explicativo
+## Tarefas da parte 2 sobre composição de componentes do catálogo
-> Texto explicando diagrama, conforme especificação do laboratório.
+> Coloque um link para o arquivo do notebook com a resolução das seis tarefas do notebook `components-4-catalog.ipynb`. Ele estará dentro da pasta `notebook`.