# Programming Fundamentals/Objects

This lesson introduces objects and object-oriented programming.

## Objectives and Skills

Objectives and skills for this lesson include:

## Readings

* Pressbooks: Programming Fundamentals
* Wikipedia: Object-oriented programming

## Multimedia

* YouTube: Object-oriented Programming in 7 minutes
* YouTube: Programming For Beginners - Object Orientation
* YouTube: Principles of OOP

## Examples

* C++
* C#
* Java
* JavaScript
* Python3
* Ruby
* Swift

## Activities

* Review MathsIsFun: Area of Plane Shapes. Create a program that asks the user what shape they would like to calculate the area for. Use if/else conditional statements to determine their selection and then gather the appropriate input and calculate and display the area of the shape. Perform all area calculations using a ShapeArea class that has separate methods to calculate and return the area for different shapes. Include data validation in the class and error handling in the main program.
* Create a program that asks the user how old they are in years. Then ask the user if they would like to know how old they are in months, days, hours, or seconds. Use if/else conditional statements to display their approximate age in the selected timeframe. Perform all calculations using an AgeConverter class that accepts the age in years during initialization and has separate properties and methods to calculate and return the age in months, days, hours, and seconds. Include data validation in the class and error handling in the main program.
* Review Wikipedia: Zeller's congruence. Create a program that asks the user for their birthday (year, month, and day) and then calculate and display the day of the week on which they were born. Use if/else conditional statements to convert the numeric day of the week to the correct string representation (Monday, Tuesday, Wednesday, etc.). Perform all calculations using a DayOfWeek class that accepts the year, month, and day during initialization and has separate properties and methods to calculate and return the day of week as a number, as an abbreviated string (Mon, Tue, etc.), and as a full string (Monday, Tuesday, etc.). Include data validation in the class and error handling in the main program.

## Lesson Summary

* Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which may contain data, in the form of fields, often known as attributes; and code, in the form of procedures, often known as methods.
* A feature of objects is that an object's procedures can access and often modify the data fields of the object with which they are associated.
* Most object-oriented programming languages are class-based, meaning that objects are instances of classes, which typically also determine their type.
* Classes define the data format and available procedures for a given type of object.
* Classes may contain data members and member functions (known as class methods) themselves.
* Objects are instances of classes.
* Each object is said to be an instance of a particular class.
* Procedures in object-oriented programming are known as methods; variables are also known as fields, members, attributes, or properties.
* Class variables belong to the class as a whole; there is only one copy of each one..
* Instance variables or attributes belong to individual objects; every object has its own copy of each one.
* Member variables refer to both the class and instance variables that are defined by a particular class.
* Class methods belong to the class as a whole and have access only to class variables and inputs from the procedure call.
* Instance methods belong to individual objects, and have access to instance variables for the specific object they are called on, inputs, and class variables.
* Objects provide a layer of abstraction which can be used to separate internal from external code.
* Objects are created by calling a special type of method in the class known as a constructor.
* Encapsulation is an object-oriented programming concept that binds together the data and functions that manipulate the data, and that keeps both safe from outside interference and misuse. Data encapsulation supports data or information hiding.
* Some languages let classes enforce access restrictions explicitly, for example denoting internal data with the private keyword and designating methods intended for use by code outside the class with the public keyword.

## Key Terms
### abstraction

    A technique for arranging complexity of computer systems so that functionality may be separated from specific implementation details.

### accessor

    A method used to return the value of a private member variable, also known as a getter method.

### attribute

    A specification that defines a property of an object.

### class

    An extensible program-code-template for creating objects, providing initial values for state (member variables) and implementations of behavior (member functions or methods).

### encapsulation

    A language mechanism for restricting direct access to some of an object's components.

### field

    Also known as data member or member variable, is data encapsulated within a class or object.

### information hiding

    The principle of segregation of the design decisions in a computer program from other parts of the program. See encapsulation.

### inheritance

    An object or class being based on another object or class, using the same implementation or specifying a new implementation to maintain the same behavior.

### instance

    A concrete occurrence of an object.

### method

    A specification that defines a procedure or behavior of an object.

### mutator

    A method used to control changes to a private member variable, also known as a setter method.

### object

    A particular instance of a class where the object can be a combination of variables, functions, and data structures.

### polymorphism

    The provision of a single interface to entities of different types.

### private

    An access modifier that restricts visibility of a property or method to the class in which it is defined.

### property

    A class member, intermediate in functionality between a field (or data member) and a method, which supports reading and writing like a field using 'getter' and 'setter' method calls.

### public

    An access modifier that opens visibility of a property or method to all other classes.

### state

    Recorded information supporting preceding events or user interactions.

### static

    Properties or methods of a class that apply to all instances of the class rather than to any specific instance.

### this, self, or Me

    Keywords used in some computer programming languages to refer to the object, class, or other entity that the currently running code is part of.

## Assessments

* Quizlet: Flash Cards
* Quizlet: Quiz

## See Also

* Object Oriented Programming
* Object Oriented Software Design
* Educative: What is Object Oriented Programming? OOP Explained in Depth