import streamlit as st from utils.code_examples import cohesion_examples from utils.quiz import cohesion_quiz st.title("Cohesion in Software Architecture") st.write(""" Cohesion refers to the degree to which the elements within a module belong together. High cohesion is generally associated with good software design. """) st.subheader("Types of Cohesion") st.write(""" 1. **Functional Cohesion**: All elements of the module are related to the performance of a single function. 2. **Sequential Cohesion**: Elements of a module are involved in activities where output from one element serves as input to another. 3. **Communicational Cohesion**: Elements of a module operate on the same data. 4. **Procedural Cohesion**: Elements of a module are involved in different and possibly unrelated actions that must be performed in a specific order. 5. **Temporal Cohesion**: Elements are related by the fact that they are processed at a particular time in program execution. 6. **Logical Cohesion**: Elements perform similar operations, but these operations are unrelated. 7. **Coincidental Cohesion**: Elements have no meaningful relationship to one another. """) st.subheader("Examples of Cohesion") for i, (title, description, code) in enumerate(cohesion_examples, 1): st.markdown(f"### Example {i}: {title}") st.write(description) st.code(code, language="python") st.subheader("Interactive Exercise: Identify Cohesion Types") st.write("Analyze the following code snippets and identify the type of cohesion present.") code1 = """ class UserManager: def create_user(self, username, email): # logic to create user pass def delete_user(self, user_id): # logic to delete user pass def update_user(self, user_id, new_data): # logic to update user pass """ code2 = """ class ReportGenerator: def generate_sales_report(self): # logic for sales report pass def generate_inventory_report(self): # logic for inventory report pass def send_email(self, report): # logic to send email pass """ st.code(code1, language="python") user_answer1 = st.selectbox("What type of cohesion is present in the first example?", ("Functional", "Sequential", "Communicational", "Procedural", "Temporal", "Logical", "Coincidental")) st.code(code2, language="python") user_answer2 = st.selectbox("What type of cohesion is present in the second example?", ("Functional", "Sequential", "Communicational", "Procedural", "Temporal", "Logical", "Coincidental")) if st.button("Check Answers"): if user_answer1 == "Functional" and user_answer2 == "Logical": st.success("Correct! The UserManager class shows functional cohesion, while the ReportGenerator class shows logical cohesion.") else: st.error("Not quite. Try again!") st.markdown("---") st.subheader("Quiz: Cohesion Concepts") cohesion_quiz()