From e9f365a853eccaccc51e499bccbaa718b1b7da92 Mon Sep 17 00:00:00 2001
From: Spencer Smith <smiths@mcmaster.ca>
Date: Tue, 13 Mar 2018 14:12:44 -0400
Subject: [PATCH] DataSet examples without abstract class

---
 Lectures/L27_SpecViaUML/DataSet/Makefile      |  53 ++++++++++++++++++
 Lectures/L27_SpecViaUML/DataSet/bin/.gitkeep  |   0
 .../L27_SpecViaUML/DataSet/bin/experiment     | Bin 0 -> 9312 bytes
 .../DataSet/experimentation/main.cpp          |  18 ++++++
 .../L27_SpecViaUML/DataSet/include/DataSet.h  |  22 ++++++++
 .../L27_SpecViaUML/DataSet/src/DataSet.cpp    |  26 +++++++++
 .../DataSetBankAccount/Makefile               |  53 ++++++++++++++++++
 .../DataSetBankAccount/bin/.gitkeep           |   0
 .../DataSetBankAccount/bin/experiment         | Bin 0 -> 14296 bytes
 .../experimentation/main.cpp                  |  23 ++++++++
 .../DataSetBankAccount/include/BankAccount.h  |  20 +++++++
 .../include/DataSetBankAccount.h              |  20 +++++++
 .../DataSetBankAccount/src/BankAccount.cpp    |  29 ++++++++++
 .../src/DataSetBankAccount.cpp                |  26 +++++++++
 .../L27_SpecViaUML/DataSetPointT/Makefile     |  53 ++++++++++++++++++
 .../L27_SpecViaUML/DataSetPointT/bin/.gitkeep |   0
 .../DataSetPointT/bin/experiment              | Bin 0 -> 14280 bytes
 .../DataSetPointT/experimentation/main.cpp    |  20 +++++++
 .../DataSetPointT/include/DataSetPoint.h      |  20 +++++++
 .../DataSetPointT/include/PointT.h            |  21 +++++++
 .../DataSetPointT/src/DataSetPoint.cpp        |  26 +++++++++
 .../DataSetPointT/src/PointT.cpp              |  38 +++++++++++++
 22 files changed, 468 insertions(+)
 create mode 100644 Lectures/L27_SpecViaUML/DataSet/Makefile
 create mode 100644 Lectures/L27_SpecViaUML/DataSet/bin/.gitkeep
 create mode 100755 Lectures/L27_SpecViaUML/DataSet/bin/experiment
 create mode 100644 Lectures/L27_SpecViaUML/DataSet/experimentation/main.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSet/include/DataSet.h
 create mode 100644 Lectures/L27_SpecViaUML/DataSet/src/DataSet.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/Makefile
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/bin/.gitkeep
 create mode 100755 Lectures/L27_SpecViaUML/DataSetBankAccount/bin/experiment
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/experimentation/main.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/include/BankAccount.h
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/include/DataSetBankAccount.h
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/src/BankAccount.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetBankAccount/src/DataSetBankAccount.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/Makefile
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/bin/.gitkeep
 create mode 100755 Lectures/L27_SpecViaUML/DataSetPointT/bin/experiment
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/experimentation/main.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/include/DataSetPoint.h
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/include/PointT.h
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/src/DataSetPoint.cpp
 create mode 100644 Lectures/L27_SpecViaUML/DataSetPointT/src/PointT.cpp

diff --git a/Lectures/L27_SpecViaUML/DataSet/Makefile b/Lectures/L27_SpecViaUML/DataSet/Makefile
new file mode 100644
index 00000000..d2c5aca0
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSet/Makefile
@@ -0,0 +1,53 @@
+SRC_DIRS := src
+C_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.c))
+CXX_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+C_OBJS := ${C_SRCS:.c=.o}
+CXX_OBJS := ${CXX_SRCS:.cpp=.o}
+OBJS := $(C_OBJS) $(CXX_OBJS)
+INCLUDE_DIRS := include
+LIBRARY_DIRS :=
+LIBRARIES :=
+
+prog_NAME := experiment
+prog_DIR := bin
+prog_FULL := $(prog_DIR)/$(prog_NAME)
+prog_SRC_DIRS := experimentation
+prog_C_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.c))
+prog_CXX_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+prog_C_OBJS := ${prog_C_SRCS:.c=.o}
+prog_CXX_OBJS := ${prog_CXX_SRCS:.cpp=.o}
+prog_OBJS := $(prog_C_OBJS) $(prog_CXX_OBJS)
+prog_INCLUDE_DIRS :=
+prog_LIBRARY_DIRS :=
+prog_LIBRARIES :=
+
+all_OBJS := $(OBJS) $(prog_OBJS) $(test_OBJS)
+DEP := $(all_OBJS:%.o=%.d)
+
+CXXFLAGS += -std=c++11
+CXXFLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
+LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir))
+LDFLAGS += $(foreach library,$(LIBRARIES),-l$(library))
+
+.PHONY: experiment src clean
+
+experiment: CXXFLAGS += $(foreach includedir,$(prog_INCLUDE_DIRS),-I$(includedir))
+experiment: LDFLAGS += $(foreach librarydir,$(prog_LIBRARY_DIRS),-L$(librarydir))
+experiment: LDFLAGS += $(foreach library,$(prog_LIBRARIES),-l$(library)) 
+
+experiment: $(prog_FULL)
+	./$(prog_FULL)
+  
+$(prog_FULL): $(prog_OBJS) $(OBJS)
+	$(LINK.cc) $^ -o $@
+
+-include $(DEP)
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -MMD -c $< -o $@
+  
+clean:
+	@- $(RM) $(prog_FULL)
+	@- $(RM) $(prog_OBJS)
+	@- $(RM) $(OBJS)
+	@- $(RM) $(DEP)
diff --git a/Lectures/L27_SpecViaUML/DataSet/bin/.gitkeep b/Lectures/L27_SpecViaUML/DataSet/bin/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/Lectures/L27_SpecViaUML/DataSet/bin/experiment b/Lectures/L27_SpecViaUML/DataSet/bin/experiment
new file mode 100755
index 0000000000000000000000000000000000000000..0d59df813474bbcda943bcd3eeac9395c83bd62f
GIT binary patch
literal 9312
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
LT#r*1G-3Y$zlSVU

literal 0
HcmV?d00001

diff --git a/Lectures/L27_SpecViaUML/DataSet/experimentation/main.cpp b/Lectures/L27_SpecViaUML/DataSet/experimentation/main.cpp
new file mode 100644
index 00000000..205661e0
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSet/experimentation/main.cpp
@@ -0,0 +1,18 @@
+#include "DataSet.h"
+
+#include <iostream>
+using namespace std;
+
+int main() {
+
+  DataSet ds;
+  ds.add(0.0);
+  ds.add(5.0);
+  ds.add(25.0);
+  ds.add(13.0);
+  
+  cout << "average = " << ds.getAverage() << "\n";
+  cout << "maximum = " << ds.getMaximum() << "\n";
+
+  return 0;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSet/include/DataSet.h b/Lectures/L27_SpecViaUML/DataSet/include/DataSet.h
new file mode 100644
index 00000000..60823d93
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSet/include/DataSet.h
@@ -0,0 +1,22 @@
+#ifndef DATASET_H
+#define DATASET_H
+
+class DataSet
+{
+  private:
+    double sum;
+    double maximum;
+    int count;
+
+  public:
+    DataSet();
+    void add(double x);
+    double getAverage();
+    double getMaximum();
+
+  friend ostream &operator<<( ostream &output, const PointT &P ) { 
+         output << "x-coord: " << P.xc << "y-coord: " << P.yc;
+         return output;
+};
+
+#endif
diff --git a/Lectures/L27_SpecViaUML/DataSet/src/DataSet.cpp b/Lectures/L27_SpecViaUML/DataSet/src/DataSet.cpp
new file mode 100644
index 00000000..0cc8a8e5
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSet/src/DataSet.cpp
@@ -0,0 +1,26 @@
+#include "DataSet.h"
+
+DataSet::DataSet()
+{
+  this->sum = 0.0;
+  this->maximum = 0.0;
+  this->count = 0;
+}
+
+void DataSet::add(double x)
+{
+     this->sum += x;
+     if (count == 0 || maximum < x) maximum = x;
+     count++;
+}
+
+double DataSet::getAverage()
+{
+   if (count == 0) return 0;
+     else return sum/count;
+}
+
+double DataSet::getMaximum()
+{
+   return maximum;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/Makefile b/Lectures/L27_SpecViaUML/DataSetBankAccount/Makefile
new file mode 100644
index 00000000..d2c5aca0
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/Makefile
@@ -0,0 +1,53 @@
+SRC_DIRS := src
+C_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.c))
+CXX_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+C_OBJS := ${C_SRCS:.c=.o}
+CXX_OBJS := ${CXX_SRCS:.cpp=.o}
+OBJS := $(C_OBJS) $(CXX_OBJS)
+INCLUDE_DIRS := include
+LIBRARY_DIRS :=
+LIBRARIES :=
+
+prog_NAME := experiment
+prog_DIR := bin
+prog_FULL := $(prog_DIR)/$(prog_NAME)
+prog_SRC_DIRS := experimentation
+prog_C_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.c))
+prog_CXX_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+prog_C_OBJS := ${prog_C_SRCS:.c=.o}
+prog_CXX_OBJS := ${prog_CXX_SRCS:.cpp=.o}
+prog_OBJS := $(prog_C_OBJS) $(prog_CXX_OBJS)
+prog_INCLUDE_DIRS :=
+prog_LIBRARY_DIRS :=
+prog_LIBRARIES :=
+
+all_OBJS := $(OBJS) $(prog_OBJS) $(test_OBJS)
+DEP := $(all_OBJS:%.o=%.d)
+
+CXXFLAGS += -std=c++11
+CXXFLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
+LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir))
+LDFLAGS += $(foreach library,$(LIBRARIES),-l$(library))
+
+.PHONY: experiment src clean
+
+experiment: CXXFLAGS += $(foreach includedir,$(prog_INCLUDE_DIRS),-I$(includedir))
+experiment: LDFLAGS += $(foreach librarydir,$(prog_LIBRARY_DIRS),-L$(librarydir))
+experiment: LDFLAGS += $(foreach library,$(prog_LIBRARIES),-l$(library)) 
+
+experiment: $(prog_FULL)
+	./$(prog_FULL)
+  
+$(prog_FULL): $(prog_OBJS) $(OBJS)
+	$(LINK.cc) $^ -o $@
+
+-include $(DEP)
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -MMD -c $< -o $@
+  
+clean:
+	@- $(RM) $(prog_FULL)
+	@- $(RM) $(prog_OBJS)
+	@- $(RM) $(OBJS)
+	@- $(RM) $(DEP)
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/bin/.gitkeep b/Lectures/L27_SpecViaUML/DataSetBankAccount/bin/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/bin/experiment b/Lectures/L27_SpecViaUML/DataSetBankAccount/bin/experiment
new file mode 100755
index 0000000000000000000000000000000000000000..9282b727ae21b5adf2bb74c2d25334fc18f6464d
GIT binary patch
literal 14296
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

literal 0
HcmV?d00001

diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/experimentation/main.cpp b/Lectures/L27_SpecViaUML/DataSetBankAccount/experimentation/main.cpp
new file mode 100644
index 00000000..cc590ff8
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/experimentation/main.cpp
@@ -0,0 +1,23 @@
+#include "BankAccount.h"
+#include "DataSetBankAccount.h"
+
+#include <iostream>
+using namespace std;
+
+int main()
+{
+
+  BankAccount b1;
+  b1.deposit(300);
+  BankAccount b2;
+  b2.deposit(100);
+  
+  DataSetBankAccount ds;
+  ds.add(b1);
+  ds.add(b2);
+  
+  cout << "average = " << ds.getAverage() << "\n";
+  cout << "maximum = " << ds.getMaximum() << "\n";
+  
+  return 0;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/include/BankAccount.h b/Lectures/L27_SpecViaUML/DataSetBankAccount/include/BankAccount.h
new file mode 100644
index 00000000..90b9e587
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/include/BankAccount.h
@@ -0,0 +1,20 @@
+#ifndef BANKACCOUNT_H
+#define BANKACCOUNT_H
+
+#include <iostream>
+
+class BankAccount 
+{
+  public:
+    BankAccount();
+    void deposit(double amount);
+    void withdraw(double amount);
+    double getBalance();
+
+    friend std::ostream& operator<< (std::ostream &out, const BankAccount &ba);
+    
+  private: 
+    double balance;
+};
+
+#endif
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/include/DataSetBankAccount.h b/Lectures/L27_SpecViaUML/DataSetBankAccount/include/DataSetBankAccount.h
new file mode 100644
index 00000000..fbc4622b
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/include/DataSetBankAccount.h
@@ -0,0 +1,20 @@
+#ifndef DATASETBANKACCOUNT_H
+#define DATASETBANKACCOUNT_H
+
+#include "BankAccount.h"
+
+class DataSetBankAccount
+{
+  private:
+    double sum;
+    BankAccount maximum;
+    int count;
+
+  public:
+    DataSetBankAccount();
+    void add(BankAccount x);
+    double getAverage();
+    BankAccount getMaximum();
+};
+
+#endif
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/src/BankAccount.cpp b/Lectures/L27_SpecViaUML/DataSetBankAccount/src/BankAccount.cpp
new file mode 100644
index 00000000..9e467380
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/src/BankAccount.cpp
@@ -0,0 +1,29 @@
+#include "BankAccount.h"
+
+BankAccount::BankAccount()
+{
+  this->balance = 0.0;
+}
+
+void BankAccount::deposit(double amount)
+{
+  this->balance += amount;
+}
+
+void BankAccount::withdraw(double amount)
+{
+  this->balance -= amount;
+}
+
+double BankAccount::getBalance()
+{
+  return balance;
+}
+
+std::ostream& operator<< (std::ostream &out, const BankAccount &ba)
+{
+  //From http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/
+  out << "BankAccount(" << ba.balance << ") ";
+ 
+  return out;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetBankAccount/src/DataSetBankAccount.cpp b/Lectures/L27_SpecViaUML/DataSetBankAccount/src/DataSetBankAccount.cpp
new file mode 100644
index 00000000..97554336
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetBankAccount/src/DataSetBankAccount.cpp
@@ -0,0 +1,26 @@
+#include "DataSetBankAccount.h"
+#include "BankAccount.h"
+
+DataSetBankAccount::DataSetBankAccount() : maximum()
+{
+  this->sum = 0.0;
+  this->count = 0;
+}
+
+void DataSetBankAccount::add(BankAccount x)
+{
+   this->sum += x.getBalance();
+   if (count == 0 || maximum.getBalance() < x.getBalance()) maximum = x;
+   count++;
+}
+
+double DataSetBankAccount::getAverage()
+{
+   if (count == 0) return 0;
+     else return sum/count;
+}
+
+BankAccount DataSetBankAccount::getMaximum()
+{
+   return maximum;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/Makefile b/Lectures/L27_SpecViaUML/DataSetPointT/Makefile
new file mode 100644
index 00000000..d2c5aca0
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/Makefile
@@ -0,0 +1,53 @@
+SRC_DIRS := src
+C_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.c))
+CXX_SRCS := $(foreach srcdir,$(SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+C_OBJS := ${C_SRCS:.c=.o}
+CXX_OBJS := ${CXX_SRCS:.cpp=.o}
+OBJS := $(C_OBJS) $(CXX_OBJS)
+INCLUDE_DIRS := include
+LIBRARY_DIRS :=
+LIBRARIES :=
+
+prog_NAME := experiment
+prog_DIR := bin
+prog_FULL := $(prog_DIR)/$(prog_NAME)
+prog_SRC_DIRS := experimentation
+prog_C_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.c))
+prog_CXX_SRCS := $(foreach srcdir,$(prog_SRC_DIRS),$(wildcard $(srcdir)/*.cpp))
+prog_C_OBJS := ${prog_C_SRCS:.c=.o}
+prog_CXX_OBJS := ${prog_CXX_SRCS:.cpp=.o}
+prog_OBJS := $(prog_C_OBJS) $(prog_CXX_OBJS)
+prog_INCLUDE_DIRS :=
+prog_LIBRARY_DIRS :=
+prog_LIBRARIES :=
+
+all_OBJS := $(OBJS) $(prog_OBJS) $(test_OBJS)
+DEP := $(all_OBJS:%.o=%.d)
+
+CXXFLAGS += -std=c++11
+CXXFLAGS += $(foreach includedir,$(INCLUDE_DIRS),-I$(includedir))
+LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir))
+LDFLAGS += $(foreach library,$(LIBRARIES),-l$(library))
+
+.PHONY: experiment src clean
+
+experiment: CXXFLAGS += $(foreach includedir,$(prog_INCLUDE_DIRS),-I$(includedir))
+experiment: LDFLAGS += $(foreach librarydir,$(prog_LIBRARY_DIRS),-L$(librarydir))
+experiment: LDFLAGS += $(foreach library,$(prog_LIBRARIES),-l$(library)) 
+
+experiment: $(prog_FULL)
+	./$(prog_FULL)
+  
+$(prog_FULL): $(prog_OBJS) $(OBJS)
+	$(LINK.cc) $^ -o $@
+
+-include $(DEP)
+
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -MMD -c $< -o $@
+  
+clean:
+	@- $(RM) $(prog_FULL)
+	@- $(RM) $(prog_OBJS)
+	@- $(RM) $(OBJS)
+	@- $(RM) $(DEP)
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/bin/.gitkeep b/Lectures/L27_SpecViaUML/DataSetPointT/bin/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/bin/experiment b/Lectures/L27_SpecViaUML/DataSetPointT/bin/experiment
new file mode 100755
index 0000000000000000000000000000000000000000..674f0f6c1ffbc463f3ebf29fbb5d2acb7c1e0d3d
GIT binary patch
literal 14280
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
ZJR{5B$5^MTYWR^4f3+EUs?)Tw{s)LP0Wtsp

literal 0
HcmV?d00001

diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/experimentation/main.cpp b/Lectures/L27_SpecViaUML/DataSetPointT/experimentation/main.cpp
new file mode 100644
index 00000000..e135e0ff
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/experimentation/main.cpp
@@ -0,0 +1,20 @@
+#include "PointT.h"
+#include "DataSetPoint.h"
+
+#include <iostream>
+using namespace std;
+
+int main()
+{
+
+  DataSetPoint ds;
+  ds.add(PointT(0.0, 0.0));
+  ds.add(PointT(3.0, 4.0));
+  ds.add(PointT(7.0, 24.0));
+  ds.add(PointT(5.0, 12.0));
+  
+  cout << "average = " << ds.getAverage() << "\n";
+  cout << "maximum = " << ds.getMaximum() << "\n";
+  
+  return 0;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/include/DataSetPoint.h b/Lectures/L27_SpecViaUML/DataSetPointT/include/DataSetPoint.h
new file mode 100644
index 00000000..bcc6f269
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/include/DataSetPoint.h
@@ -0,0 +1,20 @@
+#ifndef DATASETPOINT_H
+#define DATASETPOINT_H
+
+#include "PointT.h"
+
+class DataSetPoint 
+{
+  private:
+    double sum;
+    PointT maximum;
+    int count;
+
+  public:
+    DataSetPoint();
+    void add(PointT x);
+    double getAverage();
+    PointT getMaximum();
+};
+
+#endif
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/include/PointT.h b/Lectures/L27_SpecViaUML/DataSetPointT/include/PointT.h
new file mode 100644
index 00000000..ce3f800e
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/include/PointT.h
@@ -0,0 +1,21 @@
+#ifndef POINTT_H
+#define POINTT_H
+
+#include <iostream>
+
+class PointT 
+{
+  public:
+    PointT(double x, double y);
+    double xcoord();
+    double ycoord();
+    double distToOrigin();
+
+    friend std::ostream& operator<< (std::ostream &out, const PointT &point);
+    
+  private: 
+    double xc;
+    double yc;
+};
+
+#endif
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/src/DataSetPoint.cpp b/Lectures/L27_SpecViaUML/DataSetPointT/src/DataSetPoint.cpp
new file mode 100644
index 00000000..dc6da8fa
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/src/DataSetPoint.cpp
@@ -0,0 +1,26 @@
+#include "DataSetPoint.h"
+#include "PointT.h"
+
+DataSetPoint::DataSetPoint() : maximum(0.0, 0.0)
+{
+  this->sum = 0.0;
+  this->count = 0;
+}
+
+void DataSetPoint::add(PointT x)
+{
+   this->sum += x.distToOrigin();
+   if (count == 0 || maximum.distToOrigin() < x.distToOrigin()) maximum = x;
+   count++;
+}
+
+double DataSetPoint::getAverage()
+{
+   if (count == 0) return 0;
+     else return sum/count;
+}
+
+PointT DataSetPoint::getMaximum()
+{
+   return maximum;
+}
diff --git a/Lectures/L27_SpecViaUML/DataSetPointT/src/PointT.cpp b/Lectures/L27_SpecViaUML/DataSetPointT/src/PointT.cpp
new file mode 100644
index 00000000..3f1d5014
--- /dev/null
+++ b/Lectures/L27_SpecViaUML/DataSetPointT/src/PointT.cpp
@@ -0,0 +1,38 @@
+#include "PointT.h"
+#include <cmath>
+
+PointT::PointT(double x, double y)
+{
+  this->xc = x;
+  this->yc = y;
+}
+
+double PointT::xcoord()
+{
+  return this->xc;
+}
+
+double PointT::ycoord()
+{
+  return this->yc;
+}
+
+double PointT::distToOrigin()
+{
+  double dx;
+  double dy;
+
+  dx = this->xc;
+  dy = this->yc;
+
+  return sqrt(pow(dx,2.0) + pow(dy,2.0));
+}
+
+std::ostream& operator<< (std::ostream &out, const PointT& point)
+{
+  //From http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/
+  // Since operator<< is a friend of the Point class, we can access Point's members directly.
+  out << "PointT(" << point.xc << ", " << point.yc << ")";
+ 
+  return out;
+}
-- 
GitLab