Professional Documents
Culture Documents
INDIVIDUAL ASSIGNMENT
CT070-3-3-DPAT
DESIGN PATTERN
APU3F2308SE
STUDENT ID : TP063962
Page 1 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Abstract
The software industry's growth hinges on the adaptability and scalability of software
systems. This study delves into the critical aspect of software modifiability, investigating its
essence, significance, sub-attributes, and impact on design. The literature review surveys
existing studies, shedding light on how design principles and patterns influence Modifiability
and exploring measurement techniques.
Page 2 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Table of Contents
1.0 Introduction..........................................................................................................................7
3.0 Scenario..............................................................................................................................15
3.1 Description.....................................................................................................................15
Page 3 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
6.0 References..........................................................................................................................34
Page 4 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Table of Figure
Figure 1 - SOLID Principle......................................................................................................10
Page 5 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Page 6 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
1.0 Introduction
In today's cutthroat business environment, delivering top-notch software to users is
crucial for any company aiming to survive and thrive amidst fierce market competition. The
pursuit of software excellence has deep roots in software engineering, with significant
contributions dating back to the late 1970s. One pivotal advancement in this pursuit is Barry
Boehm's quality model from 1978 (GeeksforGeeks, 2020). With its structured approach, this
model lays down the groundwork for evaluating software quality based on specific aspects,
setting a standard for software development practices.
Boehm's model pinpoints five core quality factors, each playing a vital role in
determining a software application's overall quality (GeeksforGeeks, 2020):
Reliability: These measures how dependable a system is in operating without glitches. It is all
about assessing the software's trustworthiness in ensuring smooth functionality.
Modifiability: It gauges how easily a software system can adapt to changes. This reflects the
software's ability to flexibly adjust to new requirements and market shifts (Bitew & Singh,
2019).
Testability: This factor focuses on how easily a software program can be thoroughly tested to
match specified requirements. It is crucial for identifying and fixing errors.
Efficiency: This evaluates how well software optimises resource usage like memory, CPU
time, and throughput. Efficiency is key in delivering a responsive and resource-savvy
solution.
Portability measures the effort required to move a software program from one environment to
another. It is vital in a world where adaptability across various platforms is increasingly
important.
Moreover, in pursuing top-notch software, studies have shown that design patterns
significantly elevate the quality of object-oriented software systems (Bitew & Singh, 2019).
Design patterns are battle-tested solutions to recurring design issues, offering a structured
way to develop software. As we explore software quality attributes, we will focus on one of
these aspects, delving into how design patterns can bolster its impact and contribute to
creating better software solutions (Bitew & Singh, 2019).
Page 7 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
For example, for a system that controls indoor temperature, modifiability may mean
that you can easily make some changes, such as adding a temperature sensor to improve
accuracy, removing a broken sensor and replacing it with a new one, or even replacing the
Fahrenheit sensor with a Celsius sensor without affecting its function (Oquendo et al., 2016).
Adaptability
Software adaptability holds significant importance in the dynamic realm of science and
technology. It signifies the ability to modify the software efficiently and promptly without
causing issues or diminishing its initial quality (Oquendo et al., 2016). Thus, the software can
adapt dynamically to evolving times and is not constrained by swift technological
advancements. Our ability to adapt allows us to promptly address emerging needs or
technological advancements, ensuring our competitiveness in the fiercely competitive market.
Page 8 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Evolutionary Design
Cost-Effective Maintenance
Throughout the entire life cycle of a software system, a substantial amount of funds is
allocated to enhance the software system (Bengtsson et al., n.d.). Modifiability is a crucial
factor that enhances the system's adaptability during development and allows it to handle
potential changes. This entails proactively preparing for different scenarios beforehand and
minimizing the financial impact of any alterations. This capability facilitates the system's
ability to adjust to changes in requirements, thereby reducing expenses and enhancing
efficiency and cost-effectiveness in software development (Bengtsson et al., n.d.).
Quality Improvement
Modification encompasses altering the function and enhancing various facets of system
quality (Bellamkaddem, 2021). For instance, they can enhance the system's speed, increase
its adaptability, and bolster its safety and dependability. Like enhancing a car, upgrading it
enhances its speed, fuel efficiency, and maneuverability. These modifications not only
enhance the system's capabilities but also enhance its flexibility in various scenarios and
improve its security and dependability (Bellamkaddem, 2021).
Occasionally, it may be necessary to modify the software to address issues not identified
during the testing phase or rectify performance deficiencies (Gomaa, 2011). It is akin to
performing the last refinements, ensuring that the software operates flawlessly, or optimizing
its performance for enhanced efficiency (Gomaa, 2011). These alterations enhance the
software's dependability, optimize its performance, and enhance the user experience.
In general, software systems' long-term success and sustainability are closely tied to the
crucial aspect of modifiability. It facilitates the system's ability to adapt to evolving
Page 9 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
requirements and surroundings, simplifies maintenance, and yields substantial long-term cost
savings. It is akin to incorporating a malleable framework within a dwelling, capable of being
modified as required, thereby reducing superfluous upkeep expenses, and enhancing the
longevity and comfort of the house. This also applies to software systems. Modifiability
enhances adaptability to changes, simplifies maintenance, and improves long-term cost-
effectiveness.
Correctness
Correctness refers to the ability of software to perform its intended functions consistently and
correctly (Kitakabee, 2023). If the program functions are intended, it implies that it does not
need frequent modifications, indirectly improving its modifiability (Thales, n.d.). Like a well-
executed school assignment, if you approach it correctly from the outset, there is no need for
repetitive revisions. This also applies to software (Boye, 2017). Software operating flawlessly
from the outset requires less frequent modifications, enhancing its modifiability.
Maintainability
Maintainability pertains to simplicity and convenience in modifying the software system (The
SeaLights Software Metrics, n.d.). A simple system can be upgraded or changed efficiently,
directly impacting its modifiability (Henson, 2018). Like several automobiles that are simple
to fix and have easily replaceable components, they are also more straightforward to
maintain. This also applies to software systems. If the system is easily maintainable, updating
and modifying it will be more seamless, and later adjustments and enhancements to its
modifiability will be facilitated (Thales, n.d.).
Reusability
Reusability pertains to the capacity to use preexisting code while creating novel software
applications (Sakshi Pandey, 2022). This enables the use of the same code in other
applications, hence improving the software's capacity to be modified (Doglio, 2023). It
functions as a versatile tool for many home decoration tasks, eliminating the need to create a
Page 10 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
new tool for each job saving significant time and energy. This also applies to software. By
reusing the current code, developing new features may be expedited while enhancing the
software's flexibility for future modifications and modifiability (Bellairs, 2017).
The most important design principle is the SOLID principle, which is a principle
consisting of five basic design principles that can greatly impact the modifiability of a
Page 11 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
software system. These five principles are the Single Responsibility Principle
(Modifiabilityosed Principle (OCP), Liskov Substitution Principle (LSP), Interface
Segregation Principle (ISP), and Dependency Inversion Principle (DIP). In addition to the
most important SOLID principle, DRY(Do not Repeat Yourself), KISS (Keep it simple,
Stupid! ), and YAGNI (You are not going to need it). These principles are also part of the
design principles, but in this report, only the influence of the SOLID principle on
modifiability is studied.
Software design principle Single Modifiability Principle (SRP) states that every class,
module, and function in a program should serve a purpose. This principle helps design
maintainable, reusable, and flexible software (Vincent Abba, 2022). On modifiability, if a
class or module is responsible for multiple tasks, making changes to one modifiability
frequently impacts other parts and raises the likelihood of errors (CodeWithHonor, 2022).
Implementing the single responsibility principle (SRP) and assigning each function to a
separate class can enhance code comprehension (Vincent Abba, 2022). By assigning each
function its distinct class, the code becomes more lucid and comprehensible.
The Open Closed Principle (OCP) is a software design principle that emphasizes the
importance of making software entities (such as classes, modules, etc.) easy to extend while
avoiding the need for frequent modifications (Bertrand Meyer, 1995). The key principle of
good object-oriented design is to reduce maintenance costs and improve product stability. The
Open-Closed Principle (OCP) has a beneficial effect on modifiability. By enabling the
extension of software entities without the need to modify their Modifiability effectively
minimizes the potential for introducing new errors into the system (Stack et al.). This is due
to the act of introducing the new code without making any modifications to the existing code.
OCP facilitates the seamless addition of new functionalities to the system, as it allows for the
incorporation of new code without the risk of compromising the integrity of the existing code
(Stack et al.).
The Liskov substitution principle (LSP) is a fundamental principle within the SOLID
principles. The principal highlights that when there is a class and its subclasses, the program
Page 12 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
should avoid errors or produce unexpected outcomes, regardless of whether the program uses
objects from the subclasses or the parent class (Thorben, 2018). Subclasses can function as a
replacement for the parent class without causing any disruption to the program's regular
functioning. Changes to the base class will not impact the derived class code. The derived
class inherits the base class behavior and extends it. This minimizes the need to fix the code
after altering the base class and enhances the code's adaptability (Gamma, 1996).
Dependency inversion involves prioritizing the use of interfaces or abstract entities over
concrete functions and classes in programming (Luca Cambi, 2023). The Dependency
Inversion Principle enhances the maintainability of software by impacting its modifiability.
Enhancing maintainability enables developers to modify the software with confidence.
Modifiability needs not to be concerned about disrupting the functionality of other system
components (Professional, 2018). This ultimately results in the creation of more stable and
easily manageable software.
Design patterns are crucial for ensuring high-quality attributes. These templates are
utilized to attain precise quality objectives in system design (Carnegie Mellon University,
2018). These patterns serve as the foundation for constructing most systems and the
fundamental architectural patterns (Bass et al., n.d.). Although design patterns are
implemented in a system, they do not guarantee a high degree of modifiability of the code.
For example, certain classes that employ specific design patterns (such as adapters, monads,
and template methods) may be more error-prone than classes that do not employ these
patterns (Alfadel et al., 2020).
Page 13 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
There are several methods to enhance the modifiability of the system (Oquendo et al.,
2016). These methods offer a structured approach to modifying system parameters, thereby
enhancing the performance quality of the system in certain aspects. This implies that we can
modify the system in a more adaptable manner to fulfil the quality characteristics of
behaviours (Bachmann et al., 2007). Modifiability is related to cause and effect. The purpose
of architecture is to modify it to meet non-functional requirements, while the outcome is how
each modification affects other architectural elements. To clarify, system architecture changes
are made to meet criteria, and the results affect other system components (Oquendo et al.,
2016). This causal relationship can help us understand the causes and effects of system
changes.
Existing studies mentioning the impact of design principles and patterns on Modifiability
These studies have analysed the impact of design patterns on software development
and demonstrated the key role of design patterns in improving software quality, maintainabil-
ity and adaptability. As a result, design patterns have become a valuable resource for software
design and development. Design patterns are an invaluable tool for providing developers with
solutions and proactively improving the flexibility and adaptability of software systems.
Page 14 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Modifiability is an important aspect of software design and architecture. There are various
techniques for measuring modifiability.
Modifiability scenarios: Describe how the system changes. The following factors are
considered when evaluating the response to these changes: the number, size, complexity, and
workload of the artefacts involved, the time to completion, the cost (direct or opportunity
cost), the impact of the change on other functional or quality attributes, and the number of
new problems that arise (Bass et al., 2013).
Modifiability Tactics: This approach manages the complexity of change to save time and
money. Strategies include reducing module size, increasing intra-module relevance, reducing
inter-module relevance, encapsulating functionality, maintaining semantic coherence, using
intermediaries, limiting dependencies, refactoring, using shared services, and deferring
change (Bass et al., 2013).
Task Complexity Model: The model uses Wood's Task Complexity Model, which provides
a general framework for the analysis. It describes aspects that affect maintenance tasks and
modifiability but does not consider the impact of each maintenance manager (He & Carver,
2009).
Page 15 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
3.0 Scenario
Adding New Beverage Categories: Responding To Market Changes
3.1 Description
When new flavours of beverages, such as flavoured teas, come onto the market, smart drink
machine manufacturers may take this into account. This makes adding new tea varieties to
the machine very simple. This demonstrates the adaptability of the machine's design to
quickly add new beverage options without major changes to the system.
Page 16 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Page 17 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Administrator
Prepare Beverage:
The Smart Drink Machine can prepare a beverage selected by the Administrator or
customer.
Customer Interaction:
Customers can interact with the Smart Drink Machine to select and purchase
beverages.
Page 18 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
This is a system for managing beverage supply and distribution. The administrator
oversees managing the different types of drinks as well as maintaining the intelligent
beverage machine, whereas the intelligent beverage machine oversees making drinks and
interacting with customers. The customer is the last to receive the drink. The goal of this
system is to automate the entire process. Customers obtain drinks by interacting with the
machines, while administrators oversee ensuring that the machines have enough inventory
and that they are updated and well maintained.
Page 19 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
The Main class is a simple simulation of the administrator's interaction with the
intelligent beverage machine. It should be noted that this code is only used as an example and
serves no purpose other than to display messages on the console. In practice, these methods
will use practical logic to manage the types of drinks and customer interactions.
The Administrator class seems to be a part of a larger system for managing beverage
options and the operational status of a smart drink machine, providing administrative controls
Page 20 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
like adding or removing beverage options, updating information, monitoring the machine,
and performing maintenance tasks.
SmartDrinkMachine class mainly deals with the operation of the beverage dispenser,
which can prepare beverages according to the choice and interact with customers. The
concept of user interface or interaction is provided in the code, but how these methods realize
the function is not explained in detail.
Page 21 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
a) Lack of Interaction:
The Administrator and SmartDrinkMachine classes aren't communicating with each
other. In a real situation, the administrator typically guides or gives instructions to the
machine, but in this setup, they're working separately without much interaction.
b) Single Responsibility Violation:
The Administrator class appears to manage both administrative tasks and machine
monitoring. This goes against the Single Responsibility Principle, which recommends
that a class should focus on handling only one type of responsibility or task. This way,
if changes are needed, they are isolated to a single area rather than affecting multiple
functionalities within the class.
c) Maintenance Ambiguity
The performMaintenance method is not clear about the available maintenance actions
or how they should be conducted. There is a lack of specific information on what
tasks can be performed during maintenance or the steps involved in executing them.
Page 22 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
a) Abstract Factory
The Abstract Factory is an object-oriented programming design pattern. It offers an
interface for generating groupings of related items without explicitly mentioning their
exact kinds. This enables for the creation of object families that function together
without being bound by their implementations (Freeman & Robson, 2014). It is like a
blueprint for creating various sorts of items without needing to know what those
objects are.
This pattern separates the implementation of a collection of objects from how they are
frequently utilised (Freeman & Robson, 2014). It is dependent on the use of methods
in a factory interface to construct objects. Using this pattern allows you to switch
between multiple specialised implementations of objects without having to change the
code that uses them, even while the programme is running. However, like with other
design patterns, employing this one may make the code more complex and take more
work when first developing it.
b) Template Method
The Template Method is like a blueprint used in object-oriented programming. It lays
out the main structure of how something should be done in a method but leaves some
specific parts to be filled in by different subgroups later (Gamma et al., 1994).
Lots of folks in framework development use this pattern to dodge repeating chunks of
code. It's like a flexible recipe that lets different groups tweak bits of how things get
done without messing up the plan (Gamma et al., 1994). But like with anything fancy,
using it might make things a tad more tangled at the start, needing more work to set
up.
Page 23 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
The class diagram demonstrates how the Abstract Factory pattern decouples the
creation of beverage objects from the customer code (SmartDrinkMachine), allowing the
system to easily add new beverage types in the future without modifying existing classes.
Page 24 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Based on this class diagram, SmartDrinkMachine can use the template method pattern
to handle the preparation of various beverages while keeping the structure of the preparation
steps consistent.
Page 25 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
This implementation follows the class diagram structure to manage different beverage
types, their creation, and serving through a machine, adhering to a design pattern for
flexibility and extensibility.
This interface fosters a clear separation of concerns, allowing for easy extensibility by
adding new beverage types while maintaining a uniform way to interact with and manipulate
beverages within the system.
Page 26 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
This Tea class demonstrates adherence to the contract specified by the Beverage
interface, outlining behaviours specific to serving tea while indicating the need for further
definition regarding the tasting functionality for tea instances.
The Coffee class demonstrates conformity to the contract specified by the Beverage
interface, outlining behaviours specific to serving coffee while signalling the necessity for
additional definition regarding the tasting functionality for coffee instances.
Page 27 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
The AbstractBeverageFactory interface sets the blueprint for factories responsible for
creating beverages in a way that allows for different implementations to produce specific
types of beverages, contributing to the flexibility and maintainability of the system by
abstracting the creation process.
The TeaFactory class demonstrates the Factory Method pattern within the Abstract
Factory design, providing a specialized factory for creating Tea instances while maintaining
conformity with the broader factory interface structure.
The CoffeeFactory class demonstrates the Factory Method pattern within the Abstract
Factory design paradigm, providing a specialized factory for creating Coffee instances while
maintaining conformity with the broader factory interface structure.
Page 28 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
The Administrator class acts as a control centre for administrative tasks, providing a
set of functionalities to oversee and manage the beverage system, ensuring its functionality
and adaptability to changes in beverage offerings or machine maintenance needs.
Page 29 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Page 30 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
This abstract class sets a framework for preparing beverages, allowing different types
of beverages (e.g., coffee, tea) to implement their specific steps of brewing, pouring, and
adding condiments while following a predefined sequence outlined in the prepareBeverage()
template method.
The Coffee class customizes the steps outlined in the BeveragePreparation abstract
class to specifically cater to the process of preparing coffee, offering a concrete
implementation for each step required in making a cup of coffee. This design adheres to the
Page 31 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
template method pattern, providing a structured way to prepare different types of beverages
while allowing each beverage type to define its specific preparation steps.
Like the Coffee class, the Tea class customizes the steps defined in the
BeveragePreparation abstract class to specifically cater to the process of preparing tea. This
follows the template method pattern, providing a structured way to prepare different types of
beverages by allowing each beverage type to define its specific preparation steps while
sharing a common preparation framework.
Page 32 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
This class encapsulates the functionality of a smart drink machine that can be
configured with different beverage preparation strategies and perform the preparation process
based on the selected strategy, allowing for flexibility and reusability of beverage preparation
logic.
Page 33 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Page 34 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
6.0 References
Alfadel, M., Aljasser, K., & Alshayeb, M. (2020). Empirical study of the relationship between
design patterns and code smells. PLOS ONE, 15(4), e0231731.
https://doi.org/10.1371/journal.pone.0231731
Bachmann, F., Bass, L., & Nord, R. (2007, September 1). Modifiability Tactics.
Figshare.com. https://figshare.com/articles/report/Modifiability_Tactics/6575696/1
Bass, L., Clements, P., & Kazman, R. (2013). Software Architecture in Practice (3rd ed.).
Addison-Wesley.
Bass, L., Klein, M., & Bachmann, F. (n.d.). Quality Attribute Design Primitives and the
Attribute Driven Design Method 1. Retrieved December 14, 2023, from
https://insights.sei.cmu.edu/documents/184/2001_019_001_29612.pdf
Bellairs, R. (2017, July 7). What Is Code Reuse? Code Reuse Best Practices. Perforce
Software. https://www.perforce.com/blog/qac/what-code-reuse-code-reuse-best-
practices
Bengtsson, P., Lassing, N., Bosch, J., & Van Vliet, H. (n.d.). Analyzing Software
Architectures for Modifiability. Retrieved December 12, 2023, from
https://www.janbosch.com/Articles/SAAModifiability.pdf
Bertrand Meyer. (1995). Object-oriented software construction. New York Prentice Hall.
Bitew, N., & Singh, J. (2019). A Study on Software Quality Factors and Metrics to Enhance
Software Quality Assurance. International Journal of Productivity and Quality
Management, 1(1), 1. https://doi.org/10.1504/ijpqm.2019.10025496
Page 35 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Carnegie Mellon University. (2018, February 13). Reasoning About Software Quality
Attributes. Insights.sei.cmu.edu. https://insights.sei.cmu.edu/library/reasoning-about-
software-quality-attributes/
Doglio, F. (2023, June 6). Building With Components: Unleashing the Power of Clean Code
and Maintainability. Medium. https://blog.bitsrc.io/why-building-with-components-
is-the-best-way-to-ensure-clean-code-aa840b31c03d
Freeman, E., & Robson, E. (2014). Headfirst design patterns : a brain-friendly guide.
O’reilly, Edition: 10Th Anniversary Ed.
Gamma, E., & Addison-Wesley Publishing Company. (1998). Design patterns CD : elements
of reusable object-oriented software. Addison-Wesley.
Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design patterns : elements of
reusable object-oriented software. Addison-Wesley.
Gomaa, H. (2011). Software Quality Attributes. Cambridge University Press EBooks, 357–
368. https://doi.org/10.1017/cbo9780511779183.022
He, L., & Carver, J. C. (2009). Modifiability measurement from a task complexity
perspective: A feasibility study. https://doi.org/10.1109/esem.2009.5316023
Page 36 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Henson, M. (2018, March 16). 17 Essential Steps In The Software Upgrade Process.
ELearning Industry. https://elearningindustry.com/software-upgrade-process-
essential-steps
Kumar Malik, S. (2023, August 9). Interface Segregation Principle in Software Design.
Www.linkedin.com. https://www.linkedin.com/pulse/interface-segregation-principle-
software-design-sanjoy-kumar-malik/
Lee, P. (2020, June 19). Software Design Principles Every Programmer Should Know.
Medium. https://medium.com/@peterlee2068/software-design-principles-every-
programmer-should-know-c164a83c6f87
Luca Cambi. (2023, December 5). System Design: Dependency Inversion Principle.
Baeldung. https://www.baeldung.com/cs/dip
Oquendo, F., Leite, J., & BatistaT. (2016). Designing Modifiability in Software Architectures.
Undergraduate Topics in Computer Science, 127–141. https://doi.org/10.1007/978-3-
319-44339-3_9
Professional, D. (2018, April 18). SOLID violations in the wild: The Dependency-Inversion
Principle. Devonblog. https://www.devonblog.com/software-development/solid-
violations-in-the-wild-the-dependency-inversion-principle/
Sakshi Pandey. (2022, October 3). Importance Of Code Reusability In Software Development.
BrowserStack. https://www.browserstack.com/guide/importance-of-code-reusability
Page 37 of 38
INDIVIDUAL ASSIGNMENT CT070-3-3-DPAT
Stack Overflow. (n.d.). What is the meaning and reasoning behind the Open/Closed
Principle? Stack Overflow. Retrieved December 14, 2023, from
https://stackoverflow.com/questions/59016/what-is-the-meaning-and-reasoning-
behind-the-open-closed-principle
The SeaLights Software Metrics. (n.d.). Software Maintainability: What it Means to Build
Maintainable Software. Sealights. https://www.sealights.io/software-quality/software-
maintainability-what-it-means-to-build-maintainable-software/
Thorben. (2018, December 17). SOLID Design Principles Explained: The Liskov Substitution
Principle with Code Examples. Stackify. https://stackify.com/solid-design-liskov-
substitution-principle/
Vincent Abba, I. (2022, April 26). SOLID Definition – the SOLID Principles of Object-
Oriented Design Explained. FreeCodeCamp.org.
https://www.freecodecamp.org/news/solid-principles-single-responsibility-principle-
explained/
Page 38 of 38