SOFTWARE
CONSTRUCTION AND
CODING PRINCIPLES
COMPILED BY:
ENG. ONEN BOB OCAN
SOFTWARE CONSTRUCTION
 Detailed creation of working , meaningful software through a
combination of coding, verification, Unit testing, integration testing and
debugging. This is the "hands-on" phase where the design is translated into
executable code
Software construction is closely tied to
 Software design
 Software testing
Objectives of software construction
•Write readable, efficient, and maintainable code.
•Apply programming best practices and design principles.
•Detect and fix code smells early through refactoring.
•Use version control tools (like Git) for team collaboration.
•Produce high-quality, error-free software components
Programming Principles Overview
Good programming is not just about making code work — it’s about making
code work well and last long.
These principles guide maintainability and clarity:
• DRY – Don’t Repeat Yourself
• KISS – Keep It Simple, Stupid
• YAGNI – You Aren’t Gonna Need It
• SOLID – Object-Oriented Design Principles
DRY Principle (Don’t Repeat Yourself)
Definition: Avoid duplication of code or logic.
Why: Repeated code leads to inconsistency and maintenance issues.
How:
•Extract common logic into functions or classes.
•Use configuration files instead of hardcoded values.
•Centralize constants or reusable components.
KISS Principle (Keep It Simple, Stupid)
Meaning: Simple code is easier to understand, maintain, and extend.
Why it matters: Overly complex code increases errors and slows development.
Best Practices:
•Avoid unnecessary abstraction or nested conditions.
•Write self-explanatory code with clear variable names.
•Refactor long methods into smaller ones
YAGNI (You Aren’t Gonna Need It)
•Principle: Don’t implement functionality until it’s actually required.
•Goal: Prevent wasted time and over-engineering.
•Origin: Agile methodology — focus on immediate needs.
•Example:
❌ Adding a feature for “multi-language support” before the project requests it.
✅ Build only features users currently need.
SOLID Principles Overview
 Developed by Robert C. Martin to improve object-oriented design.
They help create software that’s flexible, reusable, and maintainable.
• S – Single Responsibility
• O – Open/Closed
• L – Liskov Substitution
• I – Interface Segregation
• D – Dependency Inversion
SOLID Explained (Part 1)
S – Single Responsibility Principle
•Each class should do only one thing.
•Changes in one concern should not affect others.
🧩 Example: A User class should not also handle database logging.
O – Open/Closed Principle
•Software should be open for extension but closed for modification.
🧩 Example: Add new shapes by extending a Shape class, not by changing its
code.
L – Liskov Substitution Principle
•Subclasses should behave like their base classes.
🧩 Example: If Bird has fly(), a subclass like Penguin shouldn’t break that
expectation.
SOLID Explained (Part 2)
I – Interface Segregation Principle
•No class should be forced to implement methods it doesn’t use.
🧩 Example: Instead of one large Animal interface, use smaller ones like
IFlyable, ISwimmable.
D – Dependency Inversion Principle
•Depend on abstractions, not concrete classes.
🧩 Example: Use interfaces so high-level modules don’t rely on specific
implementations
Design Patterns Overview
Definition: Reusable, proven solutions to recurring design problems.
Benefits:
•Promote reuse and consistency.
•Simplify complex design decisions.
•Improve maintainability and scalability.
•Originated from the “Gang of Four” (GoF) in 1994.
Types of Design Patterns
Creational Patterns: Object creation mechanisms.
•Examples: Singleton, Factory Method, Builder.
Structural Patterns: Object composition and relationships.
•Examples: Adapter, Decorator, Facade.
Behavioral Patterns: Communication between objects.
•Examples: Observer, Strategy, Command.
Creational Patterns
•Goal: Manage object creation efficiently.
•Example 1: Singleton – ensures one instance of a class (e.g., Logger).
•Example 2: Factory Method – creates objects without exposing instantiation
logic.
•Use case: When system design requires flexible object creation.
Structural Patterns
 Goal: Organize system components to form larger structures.
 Example 1: Adapter – allows incompatible interfaces to collaborate.
 Example 2: Decorator – dynamically adds responsibilities to objects.
 Use case: When integrating third-party libraries or legacy systems.
Behavioral Patterns
 Goal: Define communication between objects.
 Example 1: Observer – notifies dependents automatically on state change.
 Example 2: Strategy – defines a family of algorithms and makes them
interchangeable.
 Use case: GUI applications, notification systems, and AI algorithms
Code Quality
•Definition: The degree to which code is reliable, maintainable, and efficient.
•Why It Matters: Poor code increases cost and time of maintenance.
•Best Practices:
 Follow coding standards.
 Regularly refactor code.
 Write unit tests.
 Use linters and static analysis tools
Refactoring
•Definition: Reorganizing code without altering its external behavior.
•Purpose: Improve readability, structure, and performance.
•Examples:
•Renaming variables for clarity.
•Extracting methods to reduce duplication.
•Simplifying complex logic.
•Outcome: Clean, understandable, and testable code.
Code Smells
•Meaning: Surface symptoms of deeper design problems.
•Common Code Smells:
1.Long Method – too many lines.
2.Large Class – does too much.
3.Duplicated Code – same logic repeated.
4.Long Parameter List – hard to read and maintain.
5.Feature Envy – one class overly depends on another’s data.
•Solution: Refactor regularly to remove smells early
Version Control with Git
•Definition: System for tracking and managing code changes.
•Key Concepts:
•Repository: Project’s history and files.
•Commit: Snapshot of changes.
•Branch: Separate development path.
•Merge: Combine work from different branches.
•Benefits:
•Collaboration among multiple developers.
•Easy rollback of changes.
•Supports parallel feature development.
•Popular Platforms: GitHub, GitLab, Bitbucket.
Summary & Key Takeaways
•Follow DRY, KISS, YAGNI, and SOLID for clean, maintainable code.
•Use Design Patterns to solve recurring problems elegantly.
•Ensure Code Quality through refactoring and smell detection.
•Collaborate efficiently using Git and version control tools.
•✅ Well-written code = reliable, maintainable, and scalable software

SOFTWARE CONSTRUCTION AND CODING PRINCIPLES.pptx

  • 1.
  • 2.
    SOFTWARE CONSTRUCTION  Detailedcreation of working , meaningful software through a combination of coding, verification, Unit testing, integration testing and debugging. This is the "hands-on" phase where the design is translated into executable code Software construction is closely tied to  Software design  Software testing
  • 3.
    Objectives of softwareconstruction •Write readable, efficient, and maintainable code. •Apply programming best practices and design principles. •Detect and fix code smells early through refactoring. •Use version control tools (like Git) for team collaboration. •Produce high-quality, error-free software components
  • 4.
    Programming Principles Overview Goodprogramming is not just about making code work — it’s about making code work well and last long. These principles guide maintainability and clarity: • DRY – Don’t Repeat Yourself • KISS – Keep It Simple, Stupid • YAGNI – You Aren’t Gonna Need It • SOLID – Object-Oriented Design Principles
  • 5.
    DRY Principle (Don’tRepeat Yourself) Definition: Avoid duplication of code or logic. Why: Repeated code leads to inconsistency and maintenance issues. How: •Extract common logic into functions or classes. •Use configuration files instead of hardcoded values. •Centralize constants or reusable components.
  • 6.
    KISS Principle (KeepIt Simple, Stupid) Meaning: Simple code is easier to understand, maintain, and extend. Why it matters: Overly complex code increases errors and slows development. Best Practices: •Avoid unnecessary abstraction or nested conditions. •Write self-explanatory code with clear variable names. •Refactor long methods into smaller ones
  • 7.
    YAGNI (You Aren’tGonna Need It) •Principle: Don’t implement functionality until it’s actually required. •Goal: Prevent wasted time and over-engineering. •Origin: Agile methodology — focus on immediate needs. •Example: ❌ Adding a feature for “multi-language support” before the project requests it. ✅ Build only features users currently need.
  • 8.
    SOLID Principles Overview Developed by Robert C. Martin to improve object-oriented design. They help create software that’s flexible, reusable, and maintainable. • S – Single Responsibility • O – Open/Closed • L – Liskov Substitution • I – Interface Segregation • D – Dependency Inversion
  • 9.
    SOLID Explained (Part1) S – Single Responsibility Principle •Each class should do only one thing. •Changes in one concern should not affect others. 🧩 Example: A User class should not also handle database logging. O – Open/Closed Principle •Software should be open for extension but closed for modification. 🧩 Example: Add new shapes by extending a Shape class, not by changing its code. L – Liskov Substitution Principle •Subclasses should behave like their base classes. 🧩 Example: If Bird has fly(), a subclass like Penguin shouldn’t break that expectation.
  • 10.
    SOLID Explained (Part2) I – Interface Segregation Principle •No class should be forced to implement methods it doesn’t use. 🧩 Example: Instead of one large Animal interface, use smaller ones like IFlyable, ISwimmable. D – Dependency Inversion Principle •Depend on abstractions, not concrete classes. 🧩 Example: Use interfaces so high-level modules don’t rely on specific implementations
  • 11.
    Design Patterns Overview Definition:Reusable, proven solutions to recurring design problems. Benefits: •Promote reuse and consistency. •Simplify complex design decisions. •Improve maintainability and scalability. •Originated from the “Gang of Four” (GoF) in 1994.
  • 12.
    Types of DesignPatterns Creational Patterns: Object creation mechanisms. •Examples: Singleton, Factory Method, Builder. Structural Patterns: Object composition and relationships. •Examples: Adapter, Decorator, Facade. Behavioral Patterns: Communication between objects. •Examples: Observer, Strategy, Command.
  • 13.
    Creational Patterns •Goal: Manageobject creation efficiently. •Example 1: Singleton – ensures one instance of a class (e.g., Logger). •Example 2: Factory Method – creates objects without exposing instantiation logic. •Use case: When system design requires flexible object creation.
  • 14.
    Structural Patterns  Goal:Organize system components to form larger structures.  Example 1: Adapter – allows incompatible interfaces to collaborate.  Example 2: Decorator – dynamically adds responsibilities to objects.  Use case: When integrating third-party libraries or legacy systems.
  • 15.
    Behavioral Patterns  Goal:Define communication between objects.  Example 1: Observer – notifies dependents automatically on state change.  Example 2: Strategy – defines a family of algorithms and makes them interchangeable.  Use case: GUI applications, notification systems, and AI algorithms
  • 16.
    Code Quality •Definition: Thedegree to which code is reliable, maintainable, and efficient. •Why It Matters: Poor code increases cost and time of maintenance. •Best Practices:  Follow coding standards.  Regularly refactor code.  Write unit tests.  Use linters and static analysis tools
  • 17.
    Refactoring •Definition: Reorganizing codewithout altering its external behavior. •Purpose: Improve readability, structure, and performance. •Examples: •Renaming variables for clarity. •Extracting methods to reduce duplication. •Simplifying complex logic. •Outcome: Clean, understandable, and testable code.
  • 18.
    Code Smells •Meaning: Surfacesymptoms of deeper design problems. •Common Code Smells: 1.Long Method – too many lines. 2.Large Class – does too much. 3.Duplicated Code – same logic repeated. 4.Long Parameter List – hard to read and maintain. 5.Feature Envy – one class overly depends on another’s data. •Solution: Refactor regularly to remove smells early
  • 19.
    Version Control withGit •Definition: System for tracking and managing code changes. •Key Concepts: •Repository: Project’s history and files. •Commit: Snapshot of changes. •Branch: Separate development path. •Merge: Combine work from different branches. •Benefits: •Collaboration among multiple developers. •Easy rollback of changes. •Supports parallel feature development. •Popular Platforms: GitHub, GitLab, Bitbucket.
  • 20.
    Summary & KeyTakeaways •Follow DRY, KISS, YAGNI, and SOLID for clean, maintainable code. •Use Design Patterns to solve recurring problems elegantly. •Ensure Code Quality through refactoring and smell detection. •Collaborate efficiently using Git and version control tools. •✅ Well-written code = reliable, maintainable, and scalable software