This repository contains various projects that were created using basic principles of software design, focusing on software modularization and software units (modules/classes/components) that are small, sequential and terminating. I learned how to use precise specifications to design, implement, and verify (test/review/inspect) software units in Java and Python.
The competencies listed below were used to successfuly design the projects listed under this repository (circle ADT, generalized ADTs, Autonomous Rescue Robots, and Battleship):
- Decomposing requirements into well-structured modules using established design patterns (including assumptions, exceptions, methods, minimalism, effectiveness, etc.)
- Documenting Module Interface Specifications for each module (Abstract objects and data types, Generics, modules with external interaction, finite state machines, UML, etc.) using discrete mathematics (first order logic, set theory, Parnas tables, etc.)
- Creating executable code from design using Functional and Object-oriented programming with proper documentation of processes and outcomes
- Verification and testing of the implementation (white box, black box, analysis, etc.)
Software life cycle, quality attributes, requirements documentation, specifying behavior; classes and objects, interface specification; creational patterns, structural design patterns, behavioral design patterns; implementation in code, reviews, testing and verification.
Michael Balas