Object-Oriented Programming: Difference between revisions
Line 46: | Line 46: | ||
Polymorphism is a feature of a programming language allowing a method to behave differently depending on the runtime state at a specific moment in time, specifically the particular object instance the method is being invoked on. The contract of the behavior is defined by an '''interface''', while the implementation of the interface may vary. In Java, different classes may implement an interface, and instances of those classes can be used interchangeably "as" that interface. In Go, different concrete types may implement an [[Go_Interfaces#Overview|interface]]. | Polymorphism is a feature of a programming language allowing a method to behave differently depending on the runtime state at a specific moment in time, specifically the particular object instance the method is being invoked on. The contract of the behavior is defined by an '''interface''', while the implementation of the interface may vary. In Java, different classes may implement an interface, and instances of those classes can be used interchangeably "as" that interface. In Go, different concrete types may implement an [[Go_Interfaces#Overview|interface]]. | ||
For details on polymorphism support in different languages, see: | |||
* [[Go_Language_Object_Oriented_Programming#Polymorphism|Object Oriented Programming in Go | Polymorphism]] |
Revision as of 16:54, 30 August 2023
Internal
Overview
Object-oriented programming is first and foremost about message passing between class instances.
Object-Oriented Analysis and Design
In software development, design is often assumed to happen before programming. In reality, analysis, programming and design ten to overlay, combine and interweave. Object-oriented analysis is the process of looking at a problem, system or task, with the intention of creating an application that addresses it, and identifying the objects and interactions between objects. The analysis stage is about what needs to be done.
The output of the analysis stage is a set of requirements.
Object-oriented design (OOD) is the process of converting the requirements into an implementation specification. The designer names the objects, defines their behaviors and formally specifies which objects can activate specific behaviors on other objects. This stage is about how things should be done.
The output of the design stage is the implementation specification.
In most cases, all these stages overlap and the development happens in an iterative model, in which a small part of the project is modeled, designed and programmed, and then the program is iteratively reviewed and expanded.
Object-Oriented Programming vs Functional Programming
Encapsulation
Encapsulation is grouping together data and functions that are related to each other. The formal definition of such a bundle of data and functions is a type or a class.
Class
A class represents a type, or a kind, of thing and concept. Classes encapsulate state - what kind of information, or attributes they can store. Classes also define behavior, or methods. Classes are blueprints for objects.
Objects
An object is a specific instance of a class.
Inheritance
The inheritance implies that there are classes that are very generic, and other classes that are specific. The specific classes can inherit specific attributes and behavior from generic classes, and they can also have specific attributes and behaviors that are particular to them, and to no one else. Thus, classes form hierarchies.
Parent types are called superclasses. Subtypes are called subclasses.
The motivation behind inheritance is code reusability. If something that is generally applicable to a set of classes, that belongs into the superclass, which can be then inherited.
Overriding
Polymorphism
Polymorphism is a feature of a programming language allowing a method to behave differently depending on the runtime state at a specific moment in time, specifically the particular object instance the method is being invoked on. The contract of the behavior is defined by an interface, while the implementation of the interface may vary. In Java, different classes may implement an interface, and instances of those classes can be used interchangeably "as" that interface. In Go, different concrete types may implement an interface.
For details on polymorphism support in different languages, see: