# 2.4 Object-Oriented Programming

#### Introduction to OOP

Since we are dealing with software, we have to understand a little bit about how software gets written. There are multiple approaches out there (such as procedural programming, functional programming) that this guide won't go into.

Object-oriented programming (referred to as OOP) is a very popular programming paradigm that has been widely-used in software development for decades. It consists of the user defining abstract **'Classes'** in their code, which have various properties and abilities. These classes are meant to represent specific things in real life, perhaps a car or a person's bank account.

Once the necessary classes for the task have been defined, the programmer then  creates usable instances of them, known as **'Objects'**.

{% hint style="info" %}
This is very much how Family creation works in Revit; users first define an abstract family (.rfa file) and then go about placing instances of it in their model.
{% endhint %}

In a nutshell, OOP is an approach to building software that revolves around defining classes and the rules for the kinds of interactions their objects might have. In order to use Python in Dynamo, you'll just need to understand this key takeaway:&#x20;

* **Classes** are abstract definitions, like .rfa files. They live in a bubble.
* **Objects** are instances of these classes. Like placed Family Instances, they can interact with other objects.

#### Footnote: Classes are Data Types

Confident Dynamo users will already be familiar with manipulating the main basic datatypes: *strings, integers, floats and Booleans*. While these datatypes will appear in all kinds of software, each application will have its own custom datatypes as well - these are its classes.

If you use a Dynamo node to fetch a Revit document's active view, it won't be of a Boolean or an int type; it will be of a **View** type (actually, its long name is *Autodesk.Revit.DB.View* and you can test this using the Object.Type node).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dynamopythonprimer.gitbook.io/dynamo-python-primer/seeing-the-bigger-picture/object-oriented-programming.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
