กำลังรัน Python

อ้างอิง :
cd mon_projet

python -m venv mon_venv

source mon_venv/bin/activate

# Sur windows
mon_venv\Scripts\activate

deactivate

ข้อกำหนดการติดตั้ง

pip install -r requirements.txt

รูปแบบการออกแบบของ GoF ใน Python

รูปแบบการออกแบบ GoF เป็นชุดของ 23 รูปแบบการออกแบบที่ได้ถูกอธิบายไว้ในหนังสือ "Design Patterns: Elements of Reusable Object-Oriented Software".

Table 1. นี่คือรายการของ design patterns ของ GoF
ชื่อ คำอธิบาย

Factory Method

สร้างอ็อบเจกต์โดยไม่ต้องระบุคลาสที่แน่นอนที่จะนำมาอินสแตนซ์

Abstract Factory

สร้างกลุ่มของวัตถุที่เกี่ยวข้องกันหรือขึ้นต่อกัน โดยไม่ต้องระบุคลาสที่เป็นรูปธรรม (concrete class) ของวัตถุเหล่านั้น

ผู้สร้าง

แยกการสร้างวัตถุที่มีความซับซ้อนออกจากตัวแทน (representation) ของมัน เพื่อให้กระบวนการสร้างแบบเดียวกันสามารถสร้างตัวแทนที่แตกต่างกันได้

ต้นแบบ

สร้างวัตถุใหม่โดยการคัดลอกโปรโตไทป์ที่มีอยู่

Singleton

จำกัดการสร้างอินสแตนซ์ของคลาสให้มีเพียงวัตถุเดียว

อะแดปเตอร์

แปลงอินเทอร์เฟซของคลาสหนึ่งให้เป็นอีกอินเทอร์เฟซหนึ่งที่ไคลเอนต์ต้องการ

สะพาน

แยกส่วนการนามธรรม (abstraction) ออกจากการนำไปใช้งาน (implementation) เพื่อให้ทั้งสองส่วนสามารถเปลี่ยนแปลงได้อย่างเป็นอิสระต่อกัน

คอมโพสิต

จัดกลุ่มอ็อบเจกต์ในโครงสร้างแบบต้นไม้เพื่อแสดงลำดับชั้นแบบส่วนประกอบ-ส่วนรวม (part-whole hierarchies)

ตัวตกแต่ง (Decorator)

ผูกความรับผิดชอบเพิ่มเติมเข้ากับวัตถุแบบไดนามิก

Facade

จัดเตรียมอินเทอร์เฟซหนึ่งเดียวให้กับชุดของอินเทอร์เฟซในระบบย่อย

Flyweight

ลดต้นทุนในการสร้างและใช้งานอ็อบเจกต์ที่มีน้ำหนักเบา

พร็อกซี

จัดหาตัวแทนหรือตัวสำรองสำหรับวัตถุอื่นเพื่อควบคุมการเข้าถึงวัตถุนั้น

Chain of Responsibility

ช่วยให้วัตถุมากกว่าหนึ่งชิ้นสามารถประมวลผลคำขอได้

คำสั่ง

ห่อหุ้มคำขอไว้ในออบเจ็กต์ ซึ่งช่วยให้สามารถกำหนดค่าไคลเอนต์ด้วยคำขอ คิว หรือล็อกที่แตกต่างกัน และรองรับการดำเนินการที่สามารถยกเลิกได้

ล่าม

ให้การนำเสนอไวยากรณ์ของภาษาหนึ่ง และใช้การนำเสนอนี้เพื่อตีความประโยคในภาษานั้น

ตัววนซ้ำ (Iterator)

ให้วิธีการในการท่องผ่านองค์ประกอบต่างๆ ของอ็อบเจกต์แบบรวม (aggregate object) ตามลำดับ โดยไม่ต้องเปิดเผยการแสดงผลภายใน (underlying representation) ของอ็อบเจกต์นั้น

ตัวกลาง

ช่วยลดการพึ่งพากันที่ซับซ้อนระหว่างวัตถุ โดยการทำให้วัตถุเหล่านั้นสื่อสารกันผ่านวัตถุตัวกลาง (mediator object) เท่านั้น

บันทึกช่วยจำ

มอบความสามารถในการคืนค่าวัตถุให้กลับสู่สถานะก่อนหน้า (โดยไม่ละเมิดการห่อหุ้มหรือ encapsulation)

ผู้สังเกตการณ์

กำหนดความสัมพันธ์แบบหนึ่งต่อหลายระหว่างออบเจ็กต์ เพื่อที่ว่าเมื่อออบเจ็กต์หนึ่งเปลี่ยนสถานะ ออบเจ็กต์ที่ขึ้นตรงอยู่ทั้งหมดจะได้รับการแจ้งเตือนและอัปเดตโดยอัตโนมัติ

สถานะ

ช่วยให้วัตถุสามารถเปลี่ยนพฤติกรรมได้เมื่อสถานะภายในของวัตถุนั้นเปลี่ยนแปลงไป

กลยุทธ์

กำหนดตระกูลของอัลกอริทึม ห่อหุ้มแต่ละอัลกอริทึม และทำให้สามารถสลับเปลี่ยนกันได้

Template Method

กำหนดโครงร่างของอัลกอริทึมไว้ในเมธอด โดยให้คลาสย่อยเป็นผู้กำหนดขั้นตอนบางส่วน

ผู้เยี่ยมชม

ช่วยให้สามารถกำหนดการดำเนินการใหม่ที่จะกระทำกับโครงสร้างของอ็อบเจกต์ได้ โดยไม่ต้องเปลี่ยนแปลงคลาสของอ็อบเจกต์ที่ถูกดำเนินการนั้น

การโปรแกรมเชิงฟังก์ชัน

ห้องสมุด

URL

คำอธิบาย

PyMonad

https://github.com/jasondelaat/pymonad

PyMonad คือการนำโครงสร้างข้อมูลแบบ monad มาประยุกต์ใช้ใน Python โดยอ้างอิงจากภาษาโปรแกรมอย่าง Haskell และ F# พร้อมทั้งมีการนำประเภทของ monad ที่ใช้บ่อยที่สุดในการเขียนโปรแกรมเชิงฟังก์ชันมาปรับใช้https://www.miguelfarrajota.com/2021/06/monads-in-python-with-pymonad/[บทความ]

PyFunctional

https://github.com/EntilZha/PyFunctional/

PyFunctional คือไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน (functional programming) ซึ่งมีเครื่องมือสำหรับทำงานกับฟังก์ชันบริสุทธิ์ (pure functions) และ iterable

Toolz

https://toolz.readthedocs.io/en/latest/

Toolz เป็นไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน (functional programming) ซึ่งมีเครื่องมือสำหรับการทำงานกับฟังก์ชันบริสุทธิ์ (pure functions) และออบเจ็กต์ที่วนซ้ำได้ (iterables)

Fn.py

https://github.com/kachayev/fn.py

Fn.py` เป็นไลบรารี Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ซึ่งมีเครื่องมือสำหรับการทำงานกับ Pure Functions และ Iterables

มะพร้าว

https://coconut-lang.org/

Coconut เพิ่มฟีเจอร์หลายอย่างให้กับ Python สำหรับการเขียนโปรแกรมเชิงฟังก์ชัน ซึ่งรวมถึง pattern matchinghttps://stackoverflow.com/questions/11909681/are-there-pattern-matching-functions-in-python-like-this[การสนทนา sof]

ผลข้างเคียง

ลูป

# impérative way
result = []
for i in inputs:
    x = f(g(i))
    result.append(x)

# idiomatic way
result = map(comp(f,g), inputs)

บทความที่เกี่ยวข้อง