---
# System prepended metadata

title: DS_Data Abstraction
tags: [CYCS_DS]

---

# DS_Data Abstraction

{%hackmd theme-dark %}

## OOP

* OO語言可建立類別的實例
* 類別包含：
    * 屬性(單一型態)
        * 數據
        * data member
    * 行為(操作)
        * 操作數據
        * methods or member functions

* 四特性
    * 抽象(Abstraction)
        * 屬性+行為
    * 封裝(Encapsulation)
        * 隱藏內部細節(不用管怎麼實作)
    * 繼承(Inheritance)
        * 可從其他類別繼承特性，並進行擴充、修改、重複使用
    * 多型(Polymorphism)
        * 在執行階段決定適合的方法

## C++ namespace

把identifiers(宣告、定義)包成邏輯群

如果A寫了一個X類別，B也寫了一個X類別，解決整合會衝突的問題

常用於專案合作

```cpp
namespace A{
    class X{...};
}
namespace B{
    class X{...};
}

...
    
A::X x_a;
B::X x_b;
```

## C++ exceptions

* 處理例外
* try, catch

```cpp
try{
    
}
catch(const std::exception &e){ // 抓std:: exception
    
}
```

```cpp
try{
    
}
catch (...){ // 什麼都抓
    
}
```

```cpp
try{
    throw 123;
}
catch (int x){
    
}
```

### Custom Exception

```cpp
class MyException : public std::exception{ // inherit
    public:
        char *what(){ // override
            return "MyException";
        }
};
```