TOPCIT Software | 07. Software Detail Design

TOPCIT사업단
24 Aug 201718:32

Summary

TLDRThis script delves into the concept of software modularity, emphasizing its benefits like reduced complexity and improved reliability. It explores coupling and cohesion as measures of module independence and outlines structured design methods for creating control structures and refining them incrementally. The script also covers class design in object-oriented programming, detailing the transition from class diagrams to implementation, including operation signatures and associations. Lastly, it introduces software design patterns, categorizing them into creational, structural, and behavioral, highlighting their role in solving common software design issues.

Takeaways

  • 🧩 Software Modularity: The script discusses the concept of software modularity, which involves breaking down software into functional modules to enhance independence, manageability, and efficiency.
  • πŸ”— Coupling and Cohesion: It explains the importance of low coupling and high cohesion for module independence, with various types of coupling and cohesion described to measure this independence.
  • πŸ› οΈ Modular Benefits: The advantages of software modularity include reduced complexity, easier changes, efficient memory management, and improved reliability, leading to time and cost savings in development.
  • πŸ—οΈ Design Time Considerations: Software developers must consider modularity during the design phase to ensure functional independence and effective development.
  • πŸ” Cohesion and Coupling Details: The script delves into the specifics of different types of coupling (e.g., data, stamp, control) and cohesion (e.g., functional, sequential, logical) and their impact on module independence.
  • πŸ“Š Structured Design Method: It outlines the steps of structured design, starting with control structures and data flow diagrams, to create a structured chart that defines the call order between functions.
  • πŸ”„ Incremental Development: The script suggests an incremental approach to development and design review, allowing for the refinement of control structures and the improvement of code quality.
  • πŸ“š Class Design in OOD: The process of refining class diagrams in object-oriented design (OOD) by determining operation signatures, attributes, and visibility within classes is explained.
  • πŸ”„ Association Implementation: The script covers how associations between classes in OOD are translated into reference attributes during the detailed design phase, with examples of one-to-many and many-to-many associations.
  • 🎨 Design Patterns: The concept of software design patterns as reusable solutions to common software design problems is introduced, with a distinction between creational, structural, and behavioral patterns.
  • πŸ”‘ Pattern Classification: It differentiates between class patterns, which are applied to classes and determined at compile time, and object patterns, which deal with runtime object relationships and are more dynamic.

Q & A

  • What is software modularity and why is it important?

    -Software modularity refers to the practice of breaking down software into smaller, separate components called modules based on functionality. It is important because it reduces software complexity, making changes easier, facilitating program implementation, and improving reliability, which in turn saves development time, effort, and cost.

  • How is the independence of a module measured in software modularity?

    -The independence of a module is measured by the degree of coupling and cohesion. Lower coupling indicates fewer dependencies on other modules, while higher cohesion means that the elements within a module are closely related to each other.

  • What are the default properties of a module in software modularity?

    -The default properties of a module include IO elements for accepting and exporting data, functional elements for converting input to output, procedural codes for performing a function, and internal data elements that the module itself refers to.

  • What are the types of coupling in software modularity and which is the weakest?

    -Types of coupling include data coupling, stamp coupling, control coupling, external coupling, common coupling, and content coupling. Data coupling is the weakest as it involves the least interdependence between modules.

  • What does cohesion in software modularity represent and what are its types?

    -Cohesion represents the degree to which elements within a module are related to each other, indicating how well a module is defined as an independent function. Types of cohesion include functional, sequential, exchange, procedural, temporal, logical, and coincident cohesion, with functional cohesion being the strongest and coincident cohesion the weakest.

  • Can you explain the structured method in software detailed design?

    -In the structured method of software detailed design, a control structure is designed to implement the processes of the data flow diagram assigned to each task and module. This involves creating a structure chart that defines the call order between functions and helps in identifying duplicated call relationships, leading to a more concise control structure.

  • How does incremental implementation and review in detailed design improve code quality?

    -Incremental implementation and review allow developers to implement functionality in small, manageable pieces, review them through a structure chart, and then refine the code based on the improvements identified. This iterative process leads to higher quality code that reflects the refinements made.

  • What is the purpose of creating a structure chart in detailed design?

    -The purpose of creating a structure chart is to visualize the relationships between functions, helping to identify duplicated call relationships and to ensure that derived functions have an appropriate size for implementation. It also aids in determining the specific control structure corresponding to the programming language used.

  • What is the role of class detailed design in object-oriented design?

    -The role of class detailed design in object-oriented design is to refine the class diagram by determining the properties, operations, and associated visibility within the class. It involves defining exact operation signatures and attributes based on inputs such as class diagrams and sequence diagrams.

  • How are associations between classes implemented during the detailed design phase?

    -Associations between classes are implemented by replacing them with reference attributes that match the selected object-oriented language. This transformation turns associations shown in the class diagram into reference attributes of the class, making them suitable for implementation.

  • What are software design patterns and how are they classified?

    -Software design patterns are common, reusable solutions to problems that can arise in software design. They can be converted into source code and represent best practices for programmers. Design patterns are classified into creational, structural, and behavioral patterns, with further distinction between class patterns, which apply mainly to classes, and object patterns, which apply mainly to objects.

Outlines

00:00

πŸ“š Software Modularity and Design Principles

This paragraph delves into the concept of software modularity, emphasizing the importance of decomposing software into functional modules to enhance maintainability and complexity management. It explains the properties of modules, including IO elements, functional elements, procedural codes, and internal data. The benefits of modularity, such as reduced complexity, easier changes, efficient memory management, and improved reliability, are highlighted. The paragraph also touches on the significance of cohesion and coupling in measuring module independence, detailing different types of coupling and cohesion, and their impact on software design.

05:01

πŸ” Detailed Design Methods and Structure Charts

The second paragraph focuses on the structured method of software detailed design, illustrating how control structures are designed to implement data flow processes assigned to tasks and modules. It describes the creation of structure charts to define the call relationships between functions and the importance of refining these charts to avoid duplicated calls and achieve a more concise control structure. The paragraph also discusses the incremental implementation of functionality, the review process through structure charts, and the refinement of initial structure charts to ensure functions are appropriately sized for implementation.

10:02

🏭 Class Design and Association Implementation

This paragraph explores the detailed design of classes in object-oriented design, explaining how class diagrams are refined by determining properties, operations, and visibility. It provides an example of constructing an operation signature for the 'Account' class in Java and discusses the implementation of associations between classes as reference attributes. The paragraph also covers the use of collection types for one-to-many associations and the rules for transitioning associations to reference type attributes, depending on the object-oriented language used.

15:04

🎨 Software Design Patterns: Classification and Characteristics

The final paragraph introduces software design patterns as reusable solutions to common software design problems, which can be directly translated into source code. It classifies design patterns into creational, structural, and behavioral patterns, and further distinguishes between class patterns applied to classes and object patterns applied to objects. The paragraph explains the roles of these patterns in object creation, class synthesis, and interaction definition, providing insights into how they facilitate best practices in programming and improve software design.

Mindmap

Keywords

πŸ’‘Software Modularity

Software Modularity refers to the practice of breaking down a software system into distinct, interchangeable components known as modules. Each module encapsulates a specific function and contributes to the overall system. In the video, modularity is emphasized as a key concept for reducing software complexity, making changes easier, and improving development efficiency. The script discusses how the independence of modules is measured by coupling and cohesion, which are critical for effective modular design.

πŸ’‘Coupling

Coupling is a measure of the interdependence between software modules. A lower coupling indicates that modules are more independent, which is desirable for modular design. The script outlines different types of coupling, such as data coupling, stamp coupling, control coupling, external coupling, common coupling, and content coupling, with data coupling being the weakest and content coupling the strongest, illustrating the varying degrees of module interdependence.

πŸ’‘Cohesion

Cohesion refers to the degree to which the elements within a single module are related to each other. High cohesion is preferred as it indicates that a module performs a single, well-defined function. The video script describes types of cohesion, including functional, sequential, communicational, logical, and temporal, with functional cohesion being the strongest and coincident cohesion the weakest, showing the spectrum of how tightly related the components of a module should be.

πŸ’‘Control Structure

A control structure in software design is a mechanism that defines the sequence and conditions under which modules or functions are executed. The script discusses how a control structure is designed to implement the processes of a data flow diagram, establishing a call relationship between functions and the parameters passed through these calls, which is essential for creating a structured program.

πŸ’‘Structured Design

Structured Design is a methodology that focuses on creating a software system by organizing it into a hierarchy of modules, each with a specific function. The script explains that this approach involves designing control structures and creating structure charts that represent the relationships and call order between functions, which is a fundamental step in detailed design using a structured method.

πŸ’‘Incremental Implementation

Incremental Implementation is a development strategy where software is built and reviewed in stages, allowing for continuous improvement and refinement of the code. The video script mentions that it is efficient to implement functions incrementally and review them through a structure chart, which helps in writing high-quality code that reflects improvements made during the development process.

πŸ’‘Class Diagram

A class diagram is a type of diagram used in object-oriented design to show the relationships between classes and objects. The script refers to class diagrams as part of the object and behavior analysis phase, where classes are represented without specifying exact operations. The detailed design phase refines these class diagrams by determining properties, operations, and their visibility.

πŸ’‘Operation Signature

An operation signature in object-oriented programming defines the name, return type, and parameters of a method or function within a class. The video script provides an example of constructing an operation signature for the 'Account' class, including attributes like type and visibility, which are essential for the detailed design of classes.

πŸ’‘Association

Association in object-oriented design is a relationship between classes that describes how instances of one class are connected to instances of another. The script explains how associations are implemented during the detailed design phase by replacing them with reference attributes in the class, which can be object references or collection types, depending on the language used.

πŸ’‘Software Design Pattern

A software design pattern is a general, reusable solution to common software design problems. The script describes design patterns as templates or best practices that can be applied in various situations to solve recurring issues. These patterns can be categorized into creational, structural, and behavioral patterns, each serving a different purpose in the design process.

πŸ’‘Behavioral Pattern

A behavioral pattern in software design is concerned with the interactions between objects and classes and the distribution of responsibilities among them. The script mentions that behavioral patterns describe how a set of objects cooperate to perform a task, which is essential for designing flexible and reusable systems.

Highlights

Software modularity is the decomposition of software by functions, emphasizing the independence of each module.

The independence of modules is measured by coupling and cohesion, with lower coupling and higher cohesion indicating better modularity.

Modules consist of IO elements, functional elements, procedural codes, and internal data elements.

Advantages of software modularity include reduced complexity, easier changes, efficient memory management, and improved reliability.

Modularity allows for variable inheritance, saving development time, efforts, and costs.

Designing modules with functional independence in mind is crucial for effective development.

Coupling types range from data coupling, the weakest, to content coupling, the strongest, affecting module independence.

Cohesion types include functional, sequential, and others, with functional cohesion being the strongest.

Structural detail design involves creating a control structure to implement data flow processes.

Incremental implementation and review of modules can lead to high-quality code and improved functionality.

The initial structure chart creation is based on the tasks and processes assigned to modules.

Refining the structure chart involves decomposing functions for appropriate implementation size.

Class detailed design refines class diagrams by determining properties, operations, and visibility.

Associations between classes are replaced by reference attributes during detailed design.

Design patterns provide reusable solutions to common software design problems.

Design patterns are categorized into creational, structural, and behavioral patterns.

Class patterns are applied to classes, while object patterns are applied to objects and can change at runtime.

Creational patterns are involved in the object creation process, while structural patterns deal with class or object composition.

Behavioral patterns define interactions and responsibility distribution among classes or objects.

Transcripts

play00:03

[Music]

play00:26

[Music]

play00:36

[Music]

play00:57

[Music]

play01:04

[Music]

play01:27

[Music]

play01:58

[Music]

play02:15

you

play02:22

[Music]

play02:32

[Music]

play02:45

you

play02:58

[Music]

play03:06

first let's look at the meaning of

play03:09

software modularity software modularity

play03:14

refers to the decomposition of software

play03:16

by functions and the module is

play03:18

decomposed for each function thus the

play03:21

independence of each decompose module is

play03:23

measured by the degree of coupling and

play03:25

cohesion the properties of the module

play03:28

are as follow

play03:29

it has default properties such as IO

play03:32

elements that accept and export data

play03:35

functional elements that convert input

play03:37

to output procedural codes are logic to

play03:40

perform a function and internal

play03:42

workplace of module or internal data

play03:45

elements that the module itself refers

play03:47

to also a module consists of a calling

play03:51

module that calls another module and a

play03:53

called module that is called by another

play03:55

module there are several advantages by

play03:59

doing this software modularity first the

play04:03

complexity of the software is reduced

play04:05

the changes are easier and the program

play04:07

is easy to implement in addition it is

play04:10

available to many of them by calling the

play04:12

module name as variable declarations are

play04:15

efficient memory management would be

play04:18

useful you can inherit variables without

play04:20

defining them for each module in

play04:22

particular you can save development time

play04:25

efforts and costs and it has the effect

play04:28

of improving reliability there for

play04:31

software developers always have to think

play04:33

about modularity of the program a design

play04:35

time for effective development

play04:40

the most important stuffs when designing

play04:43

a module is to maintain the functional

play04:45

independence of the module so let's take

play04:48

a closer look at the cohesion and

play04:50

coupling that can measure the degree of

play04:52

module independence first let's look at

play04:55

coupling the coupling is the degree of

play04:58

interdependence between modules or the

play05:00

relationship between two modules in

play05:02

order to become an independent module

play05:05

the coupling between each module should

play05:07

be weak and few modules depend on it

play05:10

types of couplings include data coupling

play05:13

stamp coupling control coupling external

play05:16

coupling common coupling and content

play05:18

coupling you can see that the degree of

play05:21

data coupling is the weakest and the

play05:23

content coupling is the strongest as

play05:25

shown in the figure

play05:27

next is the cohesion the coherence is an

play05:30

extension of the concept of information

play05:33

hiding which means the degree to which

play05:35

elements in a module are related to each

play05:37

other that is the extent to which a

play05:39

module is defined as an independent

play05:41

function to become an independent module

play05:44

the cohesion of each module must be

play05:46

strong types of cohesion include

play05:49

functional cohesion sequential cohesion

play05:52

exchange cohesion procedural cohesion

play05:55

temporal cohesion logical cohesion and

play05:58

coincident cohesion the degree of

play06:01

cohesion indicates that functional

play06:03

cohesion is strongest and coincident

play06:05

cohesion is weakest first let's look at

play06:19

the structural detail design method in

play06:21

software detailed design steps by

play06:24

structured method a control structure is

play06:27

designed to implement the processes of

play06:29

the data flow diagram assigned to each

play06:31

task and module here a control structure

play06:34

refers to a call relationship between

play06:36

functions in a structured development

play06:38

language such as the C language and

play06:40

passing parameters through a call so far

play06:43

the processes used to represent

play06:45

functionality and their dependencies

play06:47

have simply described constraints on the

play06:50

order in which they are executed between

play06:51

processes now we will create a structure

play06:55

chart for the functions we need to

play06:57

construct the actual programs than the

play06:59

design of the control structures that

play07:01

define the call order between them

play07:03

note that the detailed design steps does

play07:06

not have to be completed before the

play07:08

implementation begins the structure

play07:11

chart shows the relationships between

play07:12

the functions to help you identify

play07:14

duplicated call relationships and gain a

play07:17

more concise control structure therefore

play07:20

it is efficient to gradually repeat the

play07:23

implementation and detailed design

play07:24

review in other words you can implement

play07:28

the functionality you need incrementally

play07:30

review them through a structure chart

play07:32

and then can write high-quality code

play07:35

that reflects your improvements it is

play07:37

more effective to implement the

play07:39

functions of the modules gradually

play07:41

repeating reviews after developing them

play07:43

as the functional units the first

play07:49

activity in the structured detailed

play07:51

design steps is the creation of a

play07:53

structure chart in creating a structure

play07:55

chart a specific control structure

play07:57

corresponding to the components of the

play07:59

programming language to be used in the

play08:01

implementation must be derived in order

play08:04

to implement the processes assigned to

play08:06

the tasks and modules in other words

play08:10

there must be some function there must

play08:12

be a decision about the call relation

play08:14

between each function and the parameters

play08:17

to be passed through these call

play08:18

relationships must be determined

play08:20

creating a structure chart is roughly

play08:22

divided into two tasks first perform an

play08:26

initial structure chart creation that

play08:28

satisfies the dependencies of given

play08:30

processes and refine initial structure

play08:34

chart so that derived functions have

play08:36

appropriate size first I will explain

play08:39

the initial structure chart creation the

play08:42

creation of initial structure chart

play08:44

starts by creating a structure chart

play08:45

that implements the functions of the

play08:47

interface based on the tasks and the

play08:50

processes assigned to the modules to

play08:53

understand the technique of creating a

play08:54

structure chart you must be able to

play08:56

clearly distinguish between the

play08:58

information flow and processes and the

play09:00

call relationships that make up the

play09:02

control structure the figure shows the

play09:04

information flow between two processes

play09:07

in this figure it is specified that

play09:09

process a creates the data after the

play09:12

operation and sends it to process B this

play09:16

information flow can be largely

play09:17

implemented in three ways the first way

play09:20

is that the function corresponding to

play09:22

the preceding process calls the function

play09:24

corresponding to the trailing process so

play09:26

in the picture a calls B the following

play09:30

figure shows an example where function a

play09:32

calls function B the code examples in

play09:35

the figure show how the proposed

play09:36

structure chart is implemented in a

play09:38

pseudo codes the second implementation

play09:42

is that the function that corresponds to

play09:45

the tailing process calls the function

play09:46

that corresponds to the preceding

play09:48

process that is function B calls

play09:51

function a

play09:53

the following figure shows an example of

play09:55

this the code example in the figure

play09:57

shows how this works function B calls

play10:00

function a before performing its role

play10:02

then function a returns to function B

play10:05

which is performing its role

play10:07

finally function B will perform its role

play10:10

this will implement the information flow

play10:12

between processes a and B the third

play10:17

implementation is to create functions

play10:19

corresponding to processes a and B and

play10:21

introduce a new function to create a

play10:23

call relationship between two functions

play10:26

the following figure shows the

play10:28

introduction of the new function C by

play10:30

the third implementation and the code

play10:32

example shows how this works function C

play10:35

can be seen that a calls function B

play10:37

after function a was called to satisfy

play10:39

the information flow the following is

play10:45

the process of refining the structure

play10:46

chart created this step performs the

play10:49

process of decomposing the functions

play10:51

derived from the initial structure chart

play10:53

in detail so that they have an

play10:55

appropriate size for example the initial

play10:59

structure chart created as shown on the

play11:01

left is decomposed in detail as shown on

play11:04

the right this process performs to

play11:06

decompose each function in the initial

play11:08

structure chart until it gets functions

play11:10

with appropriate size for the

play11:12

implementation for example suppose that

play11:15

you need to manipulate the hardware to

play11:17

read the sensor values for sensor value

play11:19

input and correct the values if

play11:21

necessary by decomposing these tasks

play11:24

into appropriate functions you get a

play11:26

structure chart like the screen

play11:29

structure chart adds functions sensor

play11:31

reading and error correction to detail

play11:33

the function sensor value input the

play11:36

function sensor reading reads the sensed

play11:38

values by the sensor through the

play11:39

hardware function error correction will

play11:42

be called if error correction is

play11:43

required after sensor reading has been

play11:45

performed you can see the condition

play11:48

notation at the end of the call line to

play11:50

indicate this this time let me explain

play11:56

the detailed design of the class which

play11:57

is the detailed design activity in

play11:59

object-oriented design each class

play12:02

represented in the class diagram created

play12:04

in the object and behavior analysis

play12:07

phase does not specify an exact

play12:09

operation signature so the purpose of

play12:12

the class detailed design phase is to

play12:14

refine the class diagram by determining

play12:16

the property's operations and associated

play12:18

visibility inside the class inputs

play12:22

include class diagrams and sequence

play12:24

diagrams the output has a refined class

play12:27

diagram for each class shown in the

play12:29

class diagram or a find class diagram is

play12:32

output by determining the type and

play12:34

visibility of the correct operation

play12:36

signature and attributes let's look at

play12:39

how the operation signature is

play12:40

constructed through the example the

play12:43

example is designed for the operation

play12:45

signature attribute type and visibility

play12:47

of the account class when the Java

play12:49

language is adopted as an

play12:51

object-oriented programming language in

play12:53

addition you can see that a constructor

play12:56

that creates an account object has been

play12:58

added next is an implementation of the

play13:04

Association during the detailed design

play13:07

phase the association between classes

play13:09

are replaced by reference attributes

play13:11

that match the selected object oriented

play13:13

language the purpose of the Association

play13:16

implementation is to transform the

play13:18

Association shown in the class diagram

play13:20

into reference attributes of the class

play13:23

the input has a class diagram you can

play13:26

see that the output part from this

play13:27

Association implementation is the class

play13:30

with reference attribute

play13:32

the Association implementation is made

play13:34

for identified dynamic associations

play13:36

through behavior analysis activities in

play13:39

general dynamic associations with

play13:41

many-to-many cardinality are hard to

play13:44

find

play13:45

therefore you can see that the

play13:47

implementation of many to many

play13:48

associations is excluded from the

play13:51

instructions in the screen the table

play13:53

shows the rules for transiting and

play13:55

Association to a reference type

play13:56

attribute in fact the reference type

play14:00

properties depend on the object-oriented

play14:01

language for example in case of Java

play14:04

only object reference types are possible

play14:07

in C++ however reference type attributes

play14:10

can be implemented with object reference

play14:12

types and pointers for one-way

play14:15

one-to-many Association you can see the

play14:18

use of collection type collection type

play14:21

refers to algorithm classes such as set

play14:23

bag list and hash table related to data

play14:26

structure the example collection type is

play14:29

based on the Java language in general

play14:32

other object-oriented languages also

play14:34

support collection types for C++ it

play14:37

supports standard template library in

play14:40

the table you can see how each

play14:42

Association type is explained in the

play14:44

design class diagram and how the class

play14:47

is designed in relation to each

play14:48

Association now let's take a look at an

play14:51

example to show how associations are

play14:53

implemented the control classes

play14:56

associated with the depositor service

play14:58

system are only with draw workflow and

play15:01

transfer workflow you can see that each

play15:03

control class has an association with

play15:05

the object class account in case of

play15:08

account transfers the maximum

play15:10

cardinality is 2 therefore the reference

play15:13

type property in the transfer workflow

play15:15

class is defined as an array type the

play15:18

figure on the right is an example of

play15:20

converting the associations shown in the

play15:22

left figure to a reference type

play15:23

attribute

play15:27

[Music]

play15:35

the software design pattern is analogous

play15:38

to the pattern used in costume design to

play15:41

be precise a software design pattern is

play15:43

a common reusable solution to address

play15:46

the problems that can arise in the

play15:47

context of software design these design

play15:51

patterns can be not only just design

play15:53

itself but also instantly converted into

play15:55

source codes it is an explanation or

play15:58

sample of how to troubleshoot the

play16:00

problems applied in various situations

play16:02

it is also formulating the best

play16:05

practices for programmers to implement

play16:07

typically it shows the interaction or

play16:09

relationship between classes or objects

play16:14

this time we will look at how design

play16:16

patterns are classified and what their

play16:18

characteristics are design patterns are

play16:21

divided into creational patterns

play16:23

structural patterns and behavioral

play16:25

patterns according to purpose and

play16:27

depending on the scope you can

play16:30

distinguish between class patterns that

play16:31

are mainly applied to classes and object

play16:34

patterns that are mainly applied to

play16:35

objects first a creational pattern is a

play16:39

pattern involved in the process of

play16:40

creating an object a structural pattern

play16:43

is a pattern about the synthesis of a

play16:45

class or object a behavioral pattern is

play16:48

a pattern that defines how a class or

play16:50

object interacts and how

play16:51

responsibilities are distributed and the

play16:54

class pattern that applies mainly to the

play16:56

class is the pattern that deals with the

play16:58

relation between the class and the

play17:00

subclass relevancy is mainly inherited

play17:03

and it is determined statically at the

play17:05

compile time an object pattern is a

play17:08

pattern that deals with object relevance

play17:10

which can be changed at runtime and has

play17:13

a dynamic nature let's look at it more

play17:15

detail in the case of the creational

play17:18

class pattern it has the responsibility

play17:20

for subclass to transfer some of the

play17:22

responsibility for creating objects the

play17:26

creational object pattern is responsible

play17:28

for delegating responsibility for

play17:29

creating objects to other objects next

play17:32

the structural class pattern is used to

play17:35

compound classes using inheritance

play17:37

structural object pattern

play17:39

defines how objects are composited and

play17:41

in the case of behavioral class patterns

play17:44

inheritance is used to describe the

play17:46

algorithm and control flow behavioral

play17:49

object pattern is responsible for

play17:50

describing how a set of objects

play17:52

cooperate to perform a task

play17:56

[Music]

play18:22

[Music]

play18:30

[Music]

Rate This
β˜…
β˜…
β˜…
β˜…
β˜…

5.0 / 5 (0 votes)

Related Tags
Software ModularityDesign PatternsStructured DesignObject-OrientedCoding PracticesDevelopment EfficiencyModule IndependenceCoupling CohesionClass DiagramsProgramming Concepts