Object-Oriented Programming

This outline provides an overview of the object-oriented programming principles used in the generic-math-examples codebase.

The codebase utilizes objects and classes to structure and organize the code. Classes are blueprints for creating objects, which are instances of those classes.

Key OOP Concepts

  • Classes:

    • Define the structure and behavior of objects.
    • Encapsulate data (fields) and methods that operate on that data.
    • Example: RomanNumeral.cs defines the RomanNumeral class, which represents Roman numeral values.
  • Objects:

    • Instances of classes, created using the new keyword.
    • Represent specific entities within the program.
    • Example: Numeral.Create('0'); creates an object of the Numeral class.
  • Inheritance:

    • Allows creating new classes (derived classes) based on existing classes (base classes).
    • Derived classes inherit properties and methods from their base classes.
    • Example: If a Number class is defined, a RomanNumeral class could inherit from it.
  • Polymorphism:

    • Ability to perform actions differently depending on the type of object.
    • Allows for code flexibility and extensibility.
    • Example: A method that accepts a list of numbers can operate on different types of numbers (integers, Roman numerals, etc.).

Code Examples

  • Program.cs:

    • Demonstrates the creation and use of objects.
    • Uses the InvariantParse method to parse strings into objects.
    • Example: var name = InvariantParse("Fred"); creates a Name object.
  • RomanNumeral.cs:

    • Defines the RomanNumeral class, which represents Roman numeral values.
    • Implements the IParseable interface to enable parsing of Roman numeral strings.
    • Example: Numeral.Parse("V", null) creates a Numeral object from the Roman numeral “V.”
  • Name.cs:

    • Defines the Name class, which represents a name.
    • Implements the IParseable interface to enable parsing of name strings.
    • Example: var name = InvariantParse("Fred"); creates a Name object.

Benefits of OOP

  • Modularity: Code is organized into reusable components.
  • Maintainability: Code is easier to understand and modify.
  • Extensibility: New features can be added without affecting existing code.
  • Reusability: Code can be reused in different parts of the application or in other projects.

Top-Level Directory Explanations

obj/ - Temporary directory that stores compiled intermediate files during the build process.

obj/Debug/ - Temporary directory for debug versions of the compiled intermediate files.

obj/Debug/net6.0/ - Temporary directory for debug versions of the compiled intermediate files for .NET 6.0.