Skip to main content

What is Coupling? What is Cohesion? Explain different types of Cohesion and Coupling with proper example.

Understanding Coupling and Cohesion in Software Engineering

What is Coupling?

  • Coupling refers to the degree of interdependence between modules or classes in a software system.
  • High coupling indicates strong dependencies, making changes difficult and increasing the risk of unintended consequences.
  • Low coupling promotes modularity, reusability, and maintainability.

Types of Coupling

  • Content Coupling: One module directly modifies data within another. Example: Module A directly changing variables inside Module B. This is extremely undesirable.
  • Common Coupling: Modules share global data. Example: Multiple modules accessing and modifying the same global variable. Difficult to manage and understand.
  • Control Coupling: One module controls the flow of execution in another using flags or parameters. Example: Module A passing a flag to Module B to dictate its behavior. Often avoidable through better design.
  • Stamp Coupling: Modules share a composite data structure, but only use a portion of it. Example: Passing a large object when only a small subset of its data is needed. Inefficient and leads to tight coupling.
  • Data Coupling: Modules communicate through passing data parameters. Example: Module A passing specific data values to Module B. The most desirable form of coupling.

What is Cohesion?

  • Cohesion refers to how closely related the functions within a single module or class are.
  • High cohesion implies that a module performs a single, well-defined task.
  • Low cohesion suggests that a module performs unrelated tasks, making it difficult to understand, maintain, and reuse.

Types of Cohesion

  • Coincidental Cohesion: Parts of a module have no logical relationship. Example: A module containing unrelated functions such as logging and database access. Weakest form of cohesion.
  • Logical Cohesion: A module performs multiple related functions, but each is invoked independently. Example: A module performing several validation operations. Slightly improved over coincidental, but still weak.
  • Temporal Cohesion: Functions within a module are grouped because they are executed at the same time. Example: A module containing functions that are all executed during system initialization. Better than logical, but still not ideal.
  • Procedural Cohesion: Functions are grouped because they are executed in a specific order. Example: A module with functions that perform steps in a particular process. Improves upon temporal.
  • Communicational Cohesion: Functions operate on the same data. Example: A module containing functions that process data from a single input file. Strong cohesion, good design.
  • Sequential Cohesion: Output of one function serves as input for another. Example: A module with functions where the output of one is the direct input of the next. Very strong cohesion.
  • Functional Cohesion: A module performs a single, well-defined function. Example: A module calculating the area of a circle. The strongest form of cohesion and ideal.

Popular Posts

Explain Data collection methods and Techniques in UX Evaluation.

UX Evaluation: Agile Data Collection Methods & Techniques Qualitative Data Collection Methods User Interviews: Structured, semi-structured, or unstructured. Focus Groups: Moderated discussions with small groups. Contextual Inquiry: Observing users in their natural environment. Card Sorting: Organizing information architecture. Diary Studies: Users document their experiences over time. Think Aloud Protocols: Users verbalize their thoughts while using a product. Usability Testing Observations: Direct observation of user interactions. Heuristic Evaluation: Expert review against usability principles. Cognitive Walkthroughs: Step-by-step analysis of user tasks. Quantitative Data Collection Methods A/B Testing: Comparing two versions of a design. Eye Tracking: Measuring visual attention. Surveys: Gathering user feedback through questionnaires. Analytics: Tracking website or app usage data (e.g., Google Analytics). System Usability Scale (SUS): Standardized questionn...

Explain uniquely decodable code with example.

Uniquely Decodable Codes: A Deep Dive into Data Compression What is a Uniquely Decodable Code? A uniquely decodable code ensures that any encoded message can be decoded into only one possible original message. Ambiguity in decoding is eliminated. This is crucial for reliable data transmission and storage. The Importance of Unique Decodability in Data Compression Avoids information loss during decompression. Enables lossless data compression techniques. Guarantees data integrity. Example: A Uniquely Decodable Code Consider a code where: - A = 0 - B = 10 - C = 11 The encoded string "01011" can only be decoded as "ABCB". No other interpretation is possible. Example: A Non-Uniquely Decodable Code Consider a code where: - A = 0 - B = 01 - C = 011 The encoded string "011" could be interpreted as "B" or "C". This is not uniquely decodable, leading to ambiguity. Prefix-Free Codes (A type of...

What are key featuers of python?.

Python for Data Compression: Key Features Readability and Simplicity Clear syntax, making code easy to write and understand. Reduced development time compared to other languages. Extensive Libraries `zlib`, `gzip`, `bz2`, for common compression algorithms. `lzma` for advanced LZMA compression. `zipfile` for managing compressed archives. Cross-Platform Compatibility Runs smoothly on various operating systems (Windows, macOS, Linux). Facilitates easy deployment of data compression solutions. Community Support and Resources Abundant online tutorials, documentation, and community forums. Easier troubleshooting and faster problem-solving. Integration with other tools Seamlessly integrates with other data science tools (NumPy, Pandas). Simplifies data preprocessing and post-processing steps. **Google Search Description:** Learn key Python features for data compression. Explore its readability, extensive libraries (zlib, gzip, etc.), cross-platform compatibility ...

Explain Agile Testing? What are the principles of Agile Testing?

Agile Testing: A UI/UX Designer's Guide What is Agile Testing? Continuous testing integrated throughout the development lifecycle. Short, iterative testing cycles aligned with sprints. Focus on rapid feedback and continuous improvement. Close collaboration between developers, testers, and designers. Emphasis on automated testing to accelerate the process. Prioritizes user experience testing and feedback. Core Principles of Agile Testing Continuous Feedback: Testing is ongoing and feedback is immediately incorporated. Working Software over Comprehensive Documentation: Focus shifts to functional software, reducing extensive documentation. Customer Collaboration: Active user involvement ensures alignment with requirements. Embrace Change: Adaptability is key to responding to evolving user needs and feedback. Simple Design: Prioritizing user-friendliness and efficiency in UI/UX design. Self-Organizing Teams: Empowered teams manage and adjust testing strate...

Differentiate between Bottom-up versus Top-down Design.

Bottom-Up vs. Top-Down Design: A Developer's Guide Key Points: Bottom-up design: Starts with individual components and integrates them into a larger system. Top-down design: Begins with a high-level overview and breaks it down into smaller modules. Key Difference: Bottom-up focuses on component-level detail first, while top-down prioritizes overall architecture and functionality before delving into specifics. **Understanding Bottom-Up and Top-Down Design Approaches** Feature Bottom-Up Design Top-Down Design Starting Point Individual components, modules, or features Overall system architecture and high-level requirements Process Develop individual parts, then integrate; iterative refinement Define overall structure, break into smaller modules, then develop each Suitability Reusable components, complex systems ...