前提
オブジェクト指向を勉強し始めて半年ほどの、プログラミングの初心者です。
インターフェースに対して、どのようなオブジェクトを送ればいいのか迷っています。
1.プリミティブ型
2.値オブジェクト
3.オブジェクトやエンティティ
4.それ以外
どれが良いのでしょうか?
おそらく、インターフェースからの情報取得側によるかと思うのですが、
どれでもいいと思ったときにどれを選んでおけば後々後悔しないか、
常套手段、経験則などを、できましたら理由も添えて教えて頂けると助かります。
該当のソースコードでは
1.プリミティブ型
2.値オブジェクト
3.オブジェクトやエンティティ
でインターフェースから取得していますが、単純に書く量からすると値オブジェクトがすっきりしていますが、
いまいちどれが良いのか解りません。それとも、オブジェクトのライフサイクルで考えるべきなのでしょうか?
オブジェクト指向の書き方そのものがおかしいとの指摘や
前提条件が曖昧過ぎて、どれが最適かこの段階では決められないとの回答でも構いません。
(それはそれであきらめて先に進めます)
pythonで書きましたが、言語は問いません。
宜しくお願いいたします。
実現したいこと
インターフェースに対して
1.プリミティブ型
2.値オブジェクト
3.オブジェクトやエンティティ
どれを送るのがいいのかを知りたい。
該当のソースコード
python
1from abc import ABCMeta, abstractmethod 2import numpy as np 3import matplotlib.pyplot as plt 4import random 5 6"Frontend" 7class Frontend(): 8 def plot_data1(self, data): 9 data = data.get_data() 10 plt.plot(data[1], data[0]) 11 print(type(data)) 12 13 def plot_data2(self, data): 14 data = data.get_data() 15 plt.plot(data.time, data.raw_data) 16 print(type(data)) 17 18 def plot_data3(self, data): 19 obj_data = data.get_data() 20 plt.plot(obj_data.data.time, obj_data.data.raw_data) 21 print(type(data)) 22 23 24"Backend" 25class Interface(metaclass=ABCMeta): 26 @abstractmethod 27 def get_data(self): 28 pass 29 30 31class Primitive(Interface): 32 def __init__(self): 33 self.__data = Data() 34 35 def get_data(self): 36 return self.__data.raw_data, self.__data.time # primitive data 37 38 39class Value(Interface): 40 def __init__(self): 41 self.__data = Data() 42 43 def get_data(self): 44 return self.__data # value object 45 46 47class Object(Interface): 48 def __init__(self): 49 self.__data = Data() 50 51 @property 52 def data(self): 53 return self.__data 54 55 def get_data(self): 56 return self # object 57 58 59"Value Object" 60class Data(): 61 def __init__(self): 62 self.__raw_data = [random.randint(0, 10) for i in range(100)] 63 self.__time = np.linspace(1, 100, 100) 64 65 @property 66 def raw_data(self): 67 return self.__raw_data 68 69 @property 70 def time(self): 71 return self.__time 72 73if __name__ == '__main__': 74 75 primitive_data = Primitive() 76 value_obj = Value() 77 object_data = Object() 78 front_end = Frontend() 79 80 front_end.plot_data1(primitive_data) 81 front_end.plot_data2(value_obj) 82 front_end.plot_data3(object_data) 83

回答1件
あなたの回答
tips
プレビュー