KEMBAR78
Sw1 Class Notes | PDF | Test Driven Development | Inheritance (Object Oriented Programming)
0% found this document useful (0 votes)
9 views3 pages

Sw1 Class Notes

The document outlines key software principles for designing, developing, and maintaining high-quality software systems, emphasizing foundational principles like KISS, DRY, and YAGNI. It details SOLID principles for object-oriented design, design principles such as separation of concerns and modularity, and best practices for testing, maintenance, and development. Additionally, it addresses modern considerations like scalability, security, and observability, along with practical advice for real-world coding scenarios.

Uploaded by

fucskonorbi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views3 pages

Sw1 Class Notes

The document outlines key software principles for designing, developing, and maintaining high-quality software systems, emphasizing foundational principles like KISS, DRY, and YAGNI. It details SOLID principles for object-oriented design, design principles such as separation of concerns and modularity, and best practices for testing, maintenance, and development. Additionally, it addresses modern considerations like scalability, security, and observability, along with practical advice for real-world coding scenarios.

Uploaded by

fucskonorbi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Goal

To understand key software principles that guide the design, development, and maintenance
of high-quality, scalable, and maintainable software systems.

1. Foundational Principles

1.1. KISS – Keep It Simple, Stupid

• Don’t overcomplicate.

• Avoid clever hacks unless absolutely necessary.

• Prioritize readability and clarity.

• Example: Use a simple loop instead of a recursive solution if performance and clarity
both benefit.

1.2. DRY – Don’t Repeat Yourself

• Avoid code duplication.

• Reuse functions, classes, and components.

• Example: If two functions do 90% of the same thing, extract the common part.

1.3. YAGNI – You Ain’t Gonna Need It

• Don’t implement functionality until it’s necessary.

• Prevents over-engineering.

• Example: Avoid building multi-language support in an app that doesn't need it yet.

2. SOLID Principles (Object-Oriented Design)

The SOLID acronym describes five key principles for maintainable software.

S – Single Responsibility Principle

• A class/module should do one thing only, and do it well.

• Helps with easier testing and better cohesion.

O – Open/Closed Principle

• Software entities should be open for extension but closed for modification.

• You should be able to add new functionality without changing existing code (e.g., via
inheritance or interfaces).

L – Liskov Substitution Principle

• Subclasses should be substitutable for their base classes without breaking the
program.
• Example: A Bird class shouldn’t have a fly() method if Penguin extends it.

I – Interface Segregation Principle

• Prefer many small, specific interfaces over a large, general-purpose one.

• Clients shouldn't be forced to depend on methods they don’t use.

D – Dependency Inversion Principle

• Depend on abstractions, not on concrete implementations.

• High-level modules shouldn’t depend on low-level ones.

3. Design Principles

3.1. Separation of Concerns

• Split a program into distinct features that overlap minimally.

• Example: UI code should not handle database queries.

3.2. Modularity

• Write code in self-contained units (functions, classes, modules).

• Encourages reusability, parallel development, and testing.

3.3. Coupling and Cohesion

• Cohesion: How strongly-related the responsibilities of a module are (you want high
cohesion).

• Coupling: How dependent modules are on each other (you want low coupling).

4. Testing & Maintenance Principles

4.1. Testability

• Code should be written to support unit and integration testing.

• E.g., avoid static state, allow dependency injection.

4.2. Maintainability

• Code should be easy to modify, extend, or refactor.

• Use meaningful naming, clear logic, and proper documentation.

4.3. Documentation and Comments

• Document why something is done, not just what.

• Avoid redundant comments like i++; // increment i.


5. Development Practices

5.1. Continuous Integration / Continuous Delivery (CI/CD)

• Automate testing, building, and deployment.

• Makes shipping software faster and safer.

5.2. TDD – Test-Driven Development

• Write tests before implementing functionality.

• Helps clarify design and ensures test coverage.

5.3. Code Reviews & Pair Programming

• Review code for bugs, design flaws, and clarity.

• Encourages team learning and catches issues early.

6. Modern Software Considerations

6.1. Scalability

• Can your system handle growth?

• Horizontal scaling (more servers) vs. vertical (bigger servers).

6.2. Security by Design

• Build with security in mind: validate inputs, encrypt data, authenticate users properly.

6.3. Observability

• Logging, metrics, and tracing help you debug and monitor live systems.

7. Real-World Advice

• Write code for humans, not machines.

• Refactor often — if something feels wrong, it probably is.

• Use version control (e.g., Git) religiously.

• Automate boring stuff (e.g., builds, tests, deployments).

• Be aware of tech debt — and pay it off intentionally.

You might also like