From 21ce2b7b374b5c287c94a163e979dab312e5b656 Mon Sep 17 00:00:00 2001 From: "W. Spencer Smith" <smiths@mcmaster.ca> Date: Thu, 15 Mar 2018 17:05:04 -0400 Subject: [PATCH] Experiment with dataset implemented using templates --- .../L26_SpecViaUML/DataSetTemplate/Makefile | 53 ++++++++++++++++++ .../DataSetTemplate/bin/.gitkeep | 0 .../DataSetTemplate/bin/experiment | Bin 0 -> 18068 bytes .../DataSetTemplate/experimentation/main.cpp | 46 +++++++++++++++ .../DataSetTemplate/include/BankAccount.h | 22 ++++++++ .../DataSetTemplate/include/DataSetTemplate.h | 19 +++++++ .../DataSetTemplate/include/PointT.h | 24 ++++++++ .../DataSetTemplate/src/BankAccount.cpp | 34 +++++++++++ .../DataSetTemplate/src/DataSetTemplate.cpp | 37 ++++++++++++ .../DataSetTemplate/src/PointT.cpp | 49 ++++++++++++++++ 10 files changed, 284 insertions(+) create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/Makefile create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/bin/.gitkeep create mode 100755 Lectures/L26_SpecViaUML/DataSetTemplate/bin/experiment create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/experimentation/main.cpp create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/include/BankAccount.h create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/include/DataSetTemplate.h create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/include/PointT.h create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/src/BankAccount.cpp create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/src/DataSetTemplate.cpp create mode 100644 Lectures/L26_SpecViaUML/DataSetTemplate/src/PointT.cpp diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/Makefile b/Lectures/L26_SpecViaUML/DataSetTemplate/Makefile new file mode 100644 index 00000000..d2c5aca0 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/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/L26_SpecViaUML/DataSetTemplate/bin/.gitkeep b/Lectures/L26_SpecViaUML/DataSetTemplate/bin/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/bin/experiment b/Lectures/L26_SpecViaUML/DataSetTemplate/bin/experiment new file mode 100755 index 0000000000000000000000000000000000000000..1d18dba6b3dd053f4af4df8ba610796138725f12 GIT binary patch literal 18068 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 G&wm4-&HY;d literal 0 HcmV?d00001 diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/experimentation/main.cpp b/Lectures/L26_SpecViaUML/DataSetTemplate/experimentation/main.cpp new file mode 100644 index 00000000..81f42b8a --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/experimentation/main.cpp @@ -0,0 +1,46 @@ +#include "PointT.h" +#include "BankAccount.h" +#include "DataSetTemplate.h" + +#include <iostream> +using namespace std; + +typedef DataSetTemplate<PointT> DataSetPointT; +typedef DataSetTemplate<BankAccount> DataSetBankAccount; + +int main() +{ + + //Test Data Set Inteface with PointT + PointT p1(0.0, 0.0); + PointT p2(3.0, 4.0); + PointT p3(7.0, 24.0); + PointT p4(5.0, 12.0); + + DataSetPointT ds; + ds.add(p1); + ds.add(p2); + ds.add(p3); + ds.add(p4); + + cout << "average = " << ds.getAverage() << "\n"; + + cout << "maximum = " << ds.getMaximum() << "\n"; + + //Test Data Set Inteface with Bank Account + + BankAccount b1; + b1.deposit(300); + BankAccount b2; + b2.deposit(100); + + DataSetBankAccount dsBank; + dsBank.add(b1); + dsBank.add(b2); + + cout << "average = " << dsBank.getAverage() << "\n"; + + cout << "maximum = " << dsBank.getMaximum() << "\n"; + + return 0; +} diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/include/BankAccount.h b/Lectures/L26_SpecViaUML/DataSetTemplate/include/BankAccount.h new file mode 100644 index 00000000..3fd94082 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/include/BankAccount.h @@ -0,0 +1,22 @@ +#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); + + double getMeasure(); + + private: + double balance; +}; + +#endif diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/include/DataSetTemplate.h b/Lectures/L26_SpecViaUML/DataSetTemplate/include/DataSetTemplate.h new file mode 100644 index 00000000..15f22fea --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/include/DataSetTemplate.h @@ -0,0 +1,19 @@ +#ifndef DATASETTEMPLATE_H +#define DATASETTEMPLATE_H + +template <class T> +class DataSetTemplate +{ + private: + double sum; + T maximum; + int count; + + public: + DataSetTemplate(); + void add(T x); + double getAverage(); + T getMaximum(); +}; + +#endif diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/include/PointT.h b/Lectures/L26_SpecViaUML/DataSetTemplate/include/PointT.h new file mode 100644 index 00000000..65a934b2 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/include/PointT.h @@ -0,0 +1,24 @@ +#ifndef POINTT_H +#define POINTT_H + +#include <iostream> + +class PointT +{ + public: + PointT(); + PointT(double x, double y); + double xcoord(); + double ycoord(); + double distToOrigin(); + + friend std::ostream& operator<< (std::ostream &out, const PointT &point); + + double getMeasure(); + + private: + double xc; + double yc; +}; + +#endif diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/src/BankAccount.cpp b/Lectures/L26_SpecViaUML/DataSetTemplate/src/BankAccount.cpp new file mode 100644 index 00000000..2abe22d2 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/src/BankAccount.cpp @@ -0,0 +1,34 @@ +#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; +} + +double BankAccount::getMeasure() +{ + 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/L26_SpecViaUML/DataSetTemplate/src/DataSetTemplate.cpp b/Lectures/L26_SpecViaUML/DataSetTemplate/src/DataSetTemplate.cpp new file mode 100644 index 00000000..ee1d3bc0 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/src/DataSetTemplate.cpp @@ -0,0 +1,37 @@ +#include "DataSetTemplate.h" + +#include "PointT.h" +#include "BankAccount.h" + +template <class T> +DataSetTemplate<T>::DataSetTemplate() : maximum() +{ + this->sum = 0.0; + this->count = 0; +} + +template <class T> +void DataSetTemplate<T>::add(T x) +{ + this->sum += x.getMeasure(); + if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; + count++; +} + +template <class T> +double DataSetTemplate<T>::getAverage() +{ + if (count == 0) return 0; + else return sum/count; +} + +template <class T> +T DataSetTemplate<T>::getMaximum() +{ + return maximum; +} + +// explicit instantiations +template class DataSetTemplate<PointT>; +template class DataSetTemplate<BankAccount>; + diff --git a/Lectures/L26_SpecViaUML/DataSetTemplate/src/PointT.cpp b/Lectures/L26_SpecViaUML/DataSetTemplate/src/PointT.cpp new file mode 100644 index 00000000..3a3e5043 --- /dev/null +++ b/Lectures/L26_SpecViaUML/DataSetTemplate/src/PointT.cpp @@ -0,0 +1,49 @@ +#include "PointT.h" +#include <cmath> + +PointT::PointT() +{ + this->xc = 0.0; + this->yc = 0.0; +} + +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)); +} + +double PointT::getMeasure() +{ + return this->distToOrigin(); +} + +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