---
# System prepended metadata

title: '[2024] SIWP2005 Object-Oriented Programming'

---

# [2024] SIWP2005 Object-Oriented Programming

> <img width="20" height="20" src="https://img.icons8.com/fluency/48/writer-male.png" alt="writer-male"/> *Hendrik Tampubolon*
> <img width="20" height="20" src="https://img.icons8.com/nolan/64/new-post.png" alt="new-post"/> <a href="mailto:hendrik.gian@gmail.com">Reach Me!</a>

> Draft Version 1.0
> Noted: This Docs version will updated soon. 

 
![header](https://hackmd.io/_uploads/ryq0LBT06.png)


## Overview
> "Effective software development begins with a robust design. Object-oriented design serves as a blueprint for developers to conceptualize applications before writing any code, facilitating the breakdown of ideas into reusability and mantainable code which through **F**unctionality, **U**sability,**R**eliability, **P**erformances, and **S**upportability **(FURPS)** analysis.  This course is dedicated to mastering the foundational principles of object-oriented design, delivered in an engaging and interactive manner to accelerate your learning process. This Course (SIWP2005) will cover an introduction to OOP Princples including objects, classes, *Abstraction, Polymorphism, Inheritance,and Encapsulation* **(APIE)**. Beside, a practical hand-on will be introduced in Python & Javascript. In addition, FURPS requirements and analysis will be delivered with *Universal Modeling Language(**UML**)* such as use cases diagram and class diagram. 

## Learning Objectives
- understanding the idea of object-oriented programming design and its terminology 
- understanding on how to implement OOP in python
- able to build your own python package
- able to develop endpoint REST API

## SIWP2005_PBO Course Roadmaps

```mermaid
gantt
    title Roadmaps
    dateFormat YYYY-MM-DD
    Section Part I 
        Object-Oriented Fundamentals :a1, 2024-02-15, 40d
    Section Part II
        Practical OOP with Python :b1, 2024-02-29, 59d
    Section Mid-Term Exam
        UTS :ut, 2024-04-25, 1d
    Section Part III
        Build Python Package Project :c1, 2024-04-25, 35d
    Section Part IV
        Build REST API Endpoint with Flask :d1, 2024-04-25, 49d
    Section Final Project
        UAS :us, 2024-06-14, 1d
```


## Part I Object-Oriented Fundamentals
```mermaid
journey
    title Part I: Object-Oriented Fundamentals
    section Object-Oriented Fundamentals    
        Object-oriented Thinking: 5: Learning
        Objects: 3: Learning
        Classes: 3: Learning
        Instance Methods & Attributes: 3: Learning
        Class Methods & Members: 3: Learning
        APIE: 4: Learning
        Analysis & Design :4: Learning
        UML: 3: Learning
```


### Object-Oriented Thinking
> seeing everything is an object

***Fun fact
> Did you know that everything in Python is an object?
> Indeed!, all data types, structures, functions and classes are treated as objects. event Null, None is a type of object. Hence,  makes it very flexible

### Objects and Classes
- Classes:
    - one of the building-blocks of Object-Oriented Programming that acts as a ***Blueprint*** where the *data* and the *actions* of the *objects* are defined
    
- Instance:
    - a concrete object that is created from the class ***Blueprint***
- Methods:
    - an “action” defined in the class that the instances of
        the class can perform. 
- Object:
    - a concrete instance of a class stored in memory


- More about Methods, Attributes, and Members

| Term            | Decription                                                                                                                                                         |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Class              | Prototipe yang ditentukan pengguna untuk objek yang mendefinisikan seperangkat atribut yang menjadi ciri objek kelas apa pun. Atribut adalah data anggota (variabel kelas dan variabel contoh) dan metode, diakses melalui notasi titik. |
| Class variable     | Sebuah variabel yang dibagi oleh semua contoh kelas. Variabel kelas didefinisikan dalam kelas tapi di luar metode kelas manapun. Variabel kelas tidak digunakan sesering variabel contoh. |
| Data member        | Variabel kelas atau variabel contoh yang menyimpan data yang terkait dengan kelas dan objeknya.                                                                    |
| Function overloading | Penugasan lebih dari satu perilaku ke fungsi tertentu. Operasi yang dilakukan bervariasi menurut jenis objek atau argumen yang terlibat.                              |
| Instance variable  | Variabel yang didefinisikan di dalam sebuah metode dan hanya dimiliki oleh instance kelas saat ini.                                                                |
| Inheritance        | Pengalihan karakteristik kelas ke kelas lain yang berasal darinya.                                                                                                 |
| Instance           | Objek individu dari kelas tertentu. Obyek obj yang termasuk dalam Lingkaran kelas, misalnya, adalah turunan dari Lingkaran kelas.                                  |
| Instantiation      | Penciptaan sebuah instance dari sebuah kelas.                                                                                                                      |
| Method             | Jenis fungsi khusus yang didefinisikan dalam definisi kelas.                                                                                                       |
| Object             | Contoh unik dari struktur data yang didefinisikan oleh kelasnya. Objek terdiri dari kedua anggota data (variabel kelas dan variabel contoh) dan metode.             |
| Operator overloading | Penugasan lebih dari satu fungsi ke operator tertentu.                                                                                                             |


### The Fourth of APIE Components 
> 

```mermaid
    mindmap
    APIE
        Abstraction
          Key Points
             Focuses on the 'what' rather than the 'how'
             Allows users to interact with objects without needing to understand their internal complexities
        Polymorphism
            Key Points
                Enables methods to do different things based on the object that they are acting upon.
                Enhances code reusability and flexibility
        Inheritance
            Key Points
                Establishes an "is-a" relationship between classes
                Subclasses can extend or override behavior of the superclass
        Encapsulation
            Key Points
                Protects data from unauthorized access
                Enhances maintainability by localizing changes
```
### FURPS Analysis and Design
> FURPS is crucial step when developed a well-structured, reusable, and maintainable software into end product. 

```mermaid
    mindmap
    FURPS
        Functionality
          Capability
          Reusability
          Security
        Usability
            Human Factors
            Consistency
            Documentation
        Reliability
            Availability
            Failure Rate & Duration
            Predictability            
        Performance
            Speed
            Efficiency
            Resource Consumption
            Scalability
        Supportability
            Testability
            Extensibility
            Serviceability
            Configurability             
```

### Converted all into Use Case and Class Diagram with UML
> In this section, we only cover a short introduction to UML, how to prepare requirement analysis, provide a simple use case diagram, then translate it into Class Diagram. 

- Use Case Diagram

- Class Diagram


## Part II: Practical OOP with Python

```mermaid
journey
    title Hands-on
    section Object-Oriented Programing in Python    
        Revisited Python Data Types: 3: Coding
        Class and Object: 3: Coding
        Abstraction: 3: Coding
        Polymorhpism: 3: Coding
        Inheritance: 3: Coding
        Encapsulation: 3: Coding
        Memory Handling: 3: Coding
```

### Revisited Python Data Types
- Integers (int): Used for whole numbers.

```python!
x = 10
print(x)
print(type(x))

```

- Floating Point Numbers (float): Used for decimal numbers.
```python
y = 10.5
print(y)
print(type(y))

```
- Strings (str): Used for sequences of characters.
```python
name = "Katerine"
print(name)
print(type(name))

```

- Booleans (bool): Used for true/false values.

```python
is_active = True
print(is_active)
print(type(is_active))

```

- Lists: Used for ordered sequences of values.

```python
courses = ["OOP", "Intro to Programing", "Data Structure", "Data Science"]
print(courses)
print(type(courses))


```

- Tuples: Similar to lists, but immutable.

```python
coordinates = (10, 20)
print(coordinates)
print(type(coordinates))
```

- Sets: Used for unordered collections of unique elements.

```python
unique_numbers = {1, 2, 3, 3, 2}
print(unique_numbers)  # Duplicates will be removed
print(type(unique_numbers))

```

- Dictionaries (dict): Used for unordered collections of key-value pairs.
```python
siswa = {"nama": "KATHERIN", "nim": 4x2023xxx, "enrolled": siwp2005}
print(siswa)
print(type(siswa))

```

### Revisited Class, Objects, Instance, Methods

### APIE
- Abstraction
          
- Polymorphism

- Inheritance

- Encapsulation
          
> Note:
> HW#1 and HW2 will be posted on UVC, stay tuned!

## From Mid-Term ~ Final Project

## Part III: Build Your Very First Python Package
```mermaid
journey
    title Build Your Very First Python Package
    section Build Your Very First Python Package     
        Step 1 FURPS Analysis Plan Your Package : 3: Coding
        Step 2 Creating the package structure : 3: Coding
        Step 3 Creating test directory : 3: Coding
        Step 4 Setup : 3: Coding
        Step 5 Build & Distribute Your Package : 3: Coding
        Step 6 Creating Docs & README.md : 3: Coding
```
> HW#3 will be posted on UVC, stay tuned!

## Part IV: Build REST API Endpoint with Flask

```mermaid
journey
    title Build REST API Endpoint with Flask
    section Flask Framework at the glances
        Environmet-Setup-Prerequisite : 3: Coding
        Quick Start : 3: Coding
        Modular-Object-Class : 3: Coding
        DB : 3: Coding
        REST API : 3: Coding
```
