Principio de sustitución de la interfase#
Última modificación: Mayo 14, 2022
Caso 1#
Código inicial
[1]:
class DataGenerator:
#
# Funciones no relacionadas con posibles acoplamientos
# colaterales indeseados
#
def gen_images(self):
print("Running DataGenerator.gen_images()")
return "generated images"
def gen_text(self):
print("Running DataGenerator.gen_text()")
return "generated text"
def gen_rows(self):
print("Running DataGenerator.gen_rows()")
return "generated rows"
def image_featurizer():
images = DataGenerator().gen_images()
print("Running image_featurizer()")
return "featurized images"
def text_featurizer():
text = DataGenerator().gen_text()
print("Running text_featurizer()")
return "featurized text"
def row_featurizer():
rows = DataGenerator().gen_rows()
print("Running row_featurizer()")
return "featurized rows"
[2]:
image_featurizer()
Running DataGenerator.gen_images()
Running image_featurizer()
[2]:
'featurized images'
[3]:
text_featurizer()
Running DataGenerator.gen_text()
Running text_featurizer()
[3]:
'featurized text'
[4]:
row_featurizer()
Running DataGenerator.gen_rows()
Running row_featurizer()
[4]:
'featurized rows'
Separación inicial
[5]:
class DataGenerator:
def gen_images(self):
print("Running DataGenerator.gen_images()")
return "generated images"
def gen_text(self):
print("Running DataGenerator.gen_text()")
return "generated text"
def gen_rows(self):
print("Running DataGenerator.gen_rows()")
return "generated rows"
class ImageGenerator(DataGenerator):
def gen_images(self):
print("Running ImageGenerator.gen_images()")
return super().gen_images()
class TextGenerator(DataGenerator):
def gen_text(self):
print("Running TextGenerator.gen_text()")
return super().gen_text()
class RowGenerator(DataGenerator):
def gen_rows(self):
print("Running RowsGenerator.gen_rows()")
return super().gen_rows()
def image_featurizer():
images = ImageGenerator().gen_images()
print("Running image_featurizer()")
return "featurized images"
def text_featurizer():
texts = TextGenerator().gen_text()
print("Running text_featurizer")
return "featurized text"
def row_featurizer():
rows = RowGenerator().gen_rows()
print("Running row_featurizer")
return "featurized rows"
[6]:
image_featurizer()
Running ImageGenerator.gen_images()
Running DataGenerator.gen_images()
Running image_featurizer()
[6]:
'featurized images'
[7]:
text_featurizer()
Running TextGenerator.gen_text()
Running DataGenerator.gen_text()
Running text_featurizer
[7]:
'featurized text'
[8]:
row_featurizer()
Running RowsGenerator.gen_rows()
Running DataGenerator.gen_rows()
Running row_featurizer
[8]:
'featurized rows'
Separación completa
[9]:
class TextDataGenerator:
def gen_text(self):
print("Running TextDataGenerator.gen_text()")
return "generated text"
def gen_rows(self):
print("Running TextDataGenerator.gen_rows()")
return "generated rows"
class TextGenerator(TextDataGenerator):
def gen_text(self):
print("Running TextGenerator.gen_text()")
return super().gen_text()
class RowGenerator(TextDataGenerator):
def gen_rows(self):
print("Running RowsGenerator.gen_rows()")
return super().gen_rows()
class ImageDataGenerator:
def gen_images(self):
print("Running ImageDataGenerator.gen_images()")
return "generated images"
class ImageGenerator(ImageDataGenerator):
def gen_images(self):
print("Running ImageGenerator.gen_images()")
return super().gen_images()
def image_featurizer():
images = ImageGenerator().gen_images()
print("Running image_featurizer()")
return "featurized images"
def text_featurizer():
texts = TextGenerator().gen_text()
print("Running text_featurizer")
return "featurized text"
def row_featurizer():
rows = RowGenerator().gen_rows()
print("Running row_featurizer")
return "featurized rows"
[10]:
image_featurizer()
Running ImageGenerator.gen_images()
Running ImageDataGenerator.gen_images()
Running image_featurizer()
[10]:
'featurized images'
[11]:
text_featurizer()
Running TextGenerator.gen_text()
Running TextDataGenerator.gen_text()
Running text_featurizer
[11]:
'featurized text'
[12]:
row_featurizer()
Running RowsGenerator.gen_rows()
Running TextDataGenerator.gen_rows()
Running row_featurizer
[12]:
'featurized rows'