跳到主要內容


程式語言概念-類別

程式語言概念

類別

類別用在定義新的資料型態,有些語言沒有類別,會用結構來代替,有些語言兩者都有,個人覺得這兩個東西是相同的。

在類別中,可以放入多種類型的變數,如:我定義了一個叫做學生的類別,其內容有學生編號、學生姓名、學生生理性別、生日等等......,下次我只要定義出學生的變數,這種變數被稱為物件,就會直接有上述的變數可以存學生的資料,此外在定義出類別時,可以使用構造函數進行某些東西的先行處理,還能夠在類別下定義出特定的函數,以學生為例子,學生類別中定義出看見老師,可以在函數中寫印出老師好。

而有類別的程式語言,會觀察其類別是否有以下三種特性,封裝性、繼承性、多態性(多型),如果都有就會被稱為標準的物件導向程式。

類別常見基本的功能,封裝性、繼承性、多型。

封裝性的目的是為了保護該類別的一些操作函數或變數,如果將該函數或變數進換封裝之後,便可以保護該函數或變數的內容。

繼承性一般在使用的時候,稱為繼承,此特性的目的是為了把物件的特性相同的部分,抽象化出來,比如說小明、小美,他們抽象化之後,可以視為人,而人又可以再次抽象化成動物,而抽象畫的程度需要看該軟體的目的去調整,而這過程跟數學的集合的概念類似,而抽象畫的過程,可以節省程式碼。

多型為單一函數可以經由繼承後的類別對同樣的名稱的函數進行覆寫
,讓相同的概念的元件,可以提供相同的介面,讓使用者方便使用。

在使用類別的過程中,被大家歸類出一些常見的使用方法,被稱為設計模式,而設計模式會有獨立的篇章討論。

在寫程式的時候常常會遇到一個狀況,當程式碼越寫越多,會發現到其實程式碼部分是可以做優化的,優化的目的為增加可讀性、增加程式碼使用效率、增加程式碼執行效率,而這樣的行為成為重構,簡單講就是把之前的程式碼讀一遍看看是否有可以重新寫得更漂亮。

此外,在寫程式碼的時候,會注意到程式碼其實有撰寫的風格的問題,因此跟人合作之前,需要看看其他的人風格,或是用溝通的方式進行事前的規劃。

而我個人習慣的寫程式碼風格如下,在命名我習慣用大小駝峰法,在特殊情況會用底線來做間隔,通常是因為大小駝峰法不夠用的時候,另外如果是封裝起來的變數或函數,會在名稱前加上底線,在類別命名我會用大駝峰、變數、函數我會用小駝,只要是函數我通常會動作加上名詞。

在排版上我會用tab件,不會用空白鍵,省我按空白鍵的次數,一般tab鍵寬度會等語三個空白鍵寬度,而這數量是可以設定的,不過預設就是三個,另外遇到有用大括弧[}的語言,我通常不會讓上括弧單獨一樣,一行程式碼做一到兩件事情就好,不然閱讀起來會有困難。

在程式碼單行的長度,對於有些人也是講究的,因為在某些狀況單行的程式碼長度會很長,會超出螢幕,所以需要做分行的動作,分行也可以用變數去存值或是用分行符號。

此外,在銀幕的使用上,有些人也有講究,會希望是用直立式的螢幕,這樣能夠顯示的行數最多,然後螢幕個人覺得三個就夠了,一個用於資料顯示,兩個顯示程式碼,足夠了,當然前提有需要做到這個樣子。


 投影片-slideshare:程式語言概念_變數
 影片-youtube:程式語言蓋面_變數
 程式碼-Github:程式語言概念_變數
下一單元:程式語言概念_資料結構與演算法

留言

這個網誌中的熱門文章

Python-程式優化設計-module

class Objects, values and types CPython implementation detail:  For CPython,  The standard type hierarchy User-defined functions __doc__ The function’s documentation string, or  None  if unavailable; not inherited by subclasses Writable __name__ The function’s name Writable __qualname__ The function’s  qualified name New in version 3.3. Writable __module__ The name of the module the function was defined in, or  None  if unavailable. Writable __defaults__ A tuple containing default argument values for those arguments that have defaults, or  None  if no arguments have a default value Writable __code__ The code object representing the compiled function body. Writable __globals__ A reference to the dictionary that holds the function’s global variables — the global namespace of the module in which the function was defined. Read-only __dict__ The namespace supporting arbitrary function attributes. Writable __closure__ None ...

python-設計模式-原型模式

python 設計模式 原型模式 import copy  class Prototype:     def __init__(self):        self.obj = {}     def Registor(self, key,new_obj):        self.obj[key] = new_obj     def UnRegistor(self, key):        del self.obj[key]    def DeepClone(self, name, **attr):        obj_clone = copy.deepcopy(self.obj.get(name))        obj_clone.__dict__.update(attr)        return obj_clone     def Clone(self, name, **attr):        obj_clone = copy.copy(self.obj.get(name))        obj_clone.__dict__.update(attr)        return obj_clone  class a:     def __init__(self):        self.name = ['a1','a2']  class b:     def __init__(self):        self.name = 'b'...

Python-資料庫-mysql-sqlalchemy

Python 資料庫 mysql-sqlalchemy 安裝 Linux、mac : pip3 install SQLAlchemy windows     :之後補充 第一部分 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker engine = create_engine('sqlite:///:memory', echo=False) Base = declarative_base() Session = sessionmaker(bind=engine) 第二部分 from test_sqlalchemy import * from sqlalchemy import Column, Integer, String class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) password = Column(String) def __repr(self): return "<User(name={})>".format(self.name) 第三部分 from test_sqlalchemy import * from build_model import * Base.metadata.create_all(engine) user1 = User(name='user1', fullname='user1', password='user1') user2 = User(name='user2', fullname='user2...