คุณสามารถใช้การเขียนโปรแกรม "เชิงวัตถุ" โดยไม่มีคำหลักชั้น?


29

สมมติว่าเราต้องการให้มี "บัญชี" ที่เป็นนามธรรมในธนาคาร นี่คือวิธีหนึ่งโดยใช้functionวัตถุใน Python:

def account():
    """Return a dispatch dictionary representing a bank account.

    >>> a = account()
    >>> a['deposit'](100)
    100
    >>> a['withdraw'](90)
    10
    >>> a['withdraw'](90)
    'Insufficient funds'
    >>> a['balance']
    10
    """
    def withdraw(amount):
        if amount > dispatch['balance']:
            return 'Insufficient funds'
        dispatch['balance'] -= amount
        return dispatch['balance']
    def deposit(amount):
        dispatch['balance'] += amount
        return dispatch['balance']
    dispatch = {'balance': 0,
                'withdraw': withdraw,
                'deposit': deposit}
    return dispatch

นี่เป็นอีกวิธีการหนึ่งที่ใช้การพิมพ์นามธรรม (เช่นclassคำหลักใน Python):

class Account(object):
    """A bank account has a balance and an account holder.

    >>> a = Account('John')
    >>> a.deposit(100)
    100
    >>> a.withdraw(90)
    10
    >>> a.withdraw(90)
    'Insufficient funds'
    >>> a.balance
    10
    """



    def __init__(self, account_holder):
        self.balance = 0
        self.holder = account_holder

    def deposit(self, amount):
        """Add amount to balance."""
        self.balance = self.balance + amount
        return self.balance

    def withdraw(self, amount):
        """Subtract amount from balance if funds are available."""
        if amount > self.balance:
            return 'Insufficient funds'
        self.balance = self.balance - amount
        return self.balance

ครูของฉันเริ่มหัวข้อ "การเขียนโปรแกรมเชิงวัตถุ" โดยแนะนำclassคำหลักและแสดงหัวข้อย่อยเหล่านี้ให้เราทราบ:

การเขียนโปรแกรมเชิงวัตถุ

วิธีสำหรับการจัดระเบียบโปรแกรมแบบแยกส่วน:

  • อุปสรรคที่เป็นนามธรรม
  • ข้อความผ่าน
  • รวมข้อมูลและพฤติกรรมที่เกี่ยวข้องเข้าด้วยกัน

คุณคิดว่าวิธีแรกจะพอเพียงเพื่อตอบสนองความหมายข้างต้นหรือไม่ ถ้าใช่ทำไมเราต้องใช้classคำสำคัญในการเขียนโปรแกรมเชิงวัตถุ?


2
ดีใจที่คุณเห็นด้วย =) แม้ว่าฉันจะไม่รู้จัก Python ดีพอที่จะให้คำตอบอย่างละเอียด แต่คุณอาจสนใจที่จะรู้ว่าใน Javascript วิธีการทำ OOP โดยทั่วไปนั้นคล้ายคลึงกับ "function object" ที่คุณอธิบาย อนุญาตให้วัตถุ "วิธีการ" แบ่งปันแทนที่จะแยกสำเนาของแต่ละวิธีในทุกวัตถุฉันถือว่า Python classทำการปรับให้เหมาะสมแบบเดียวกัน)
Ixrec

หากคุณต้องการคำตอบโดยละเอียดคุณควรถามคำถามอื่นหรือเข้าร่วมห้องแชท แต่คำตอบสั้น ๆ คือ (ถ้าคุณไม่สนใจมรดกต้นแบบอาร์เรย์และอื่น ๆ ) อย่างสมบูรณ์ วัตถุ JS ส่วนใหญ่ไม่มีอะไรนอกจากพจนานุกรมของคีย์สตริงเป็นค่าโดยพลการ foo.bar()มักจะเหมือนกันกับfoo['bar']()และในบางครั้งหายากไวยากรณ์หลังมีประโยชน์จริง
Ixrec


8
นี่เป็นคำถามที่สำคัญมากสำหรับการทำความเข้าใจ OOP ขั้นพื้นฐาน หากคุณสนใจคุณสามารถอ่านบล็อกโพสต์ของฉันที่ฉันสร้างระบบวัตถุอย่างง่ายใน JavaScript โดยไม่ต้องพึ่งพาส่วน OOP ใด ๆ ของภาษา ตัวอย่างที่ 1 ของคุณมีข้อบกพร่องที่สำคัญที่คุณต้องการเขียนobject['method'](args), Python object['method'](object, args)วัตถุจริงจะเทียบเท่า สิ่งนี้จะเกี่ยวข้องเมื่อคลาสฐานเรียกเมธอดในคลาสย่อยเช่นในรูปแบบกลยุทธ์
อมร

13
ดังที่คนอื่น ๆ ได้กล่าวไว้นี่เป็นคำถามที่เข้าใจง่ายเกี่ยวกับ OOP ฉันจะใช้โอกาสนี้เพื่อทราบว่านี่ไม่ใช่วิธีการที่ธนาคารที่แท้จริงเป็นตัวแทนของบัญชีธนาคาร ธนาคารไม่มีวัตถุ "บัญชี" ที่ไม่แน่นอนซึ่งเปลี่ยนแปลงเมื่อคุณหักบัญชีและให้เครดิต มีรายการธุรกรรมแบบเขียนอย่างเดียวจากนั้นคำนวณยอดคงเหลือจากรายการธุรกรรม เป็นการออกกำลังกายที่ดีลองใช้กลไกนั้นในภาษาต่างๆ
Eric Lippert

คำตอบ:


66

ขอแสดงความยินดี! คุณค้นพบความจริงที่รู้จักกันดีว่าการวางแนววัตถุสามารถทำได้โดยไม่ต้องสนับสนุนภาษาการเขียนโปรแกรมเฉพาะ มันเป็นพื้นวัตถุทางเดียวกันจะถูกนำมาใช้ในโครงการในตำราคลาสสิกนี้ โปรดทราบว่าโครงการไม่มีclassคำหลักหรือเทียบเท่าบางชนิดและวัตถุที่สามารถสร้างได้โดยไม่ต้องเรียนแม้แต่

อย่างไรก็ตามกระบวนทัศน์ที่มุ่งเน้นวัตถุนั้นประสบความสำเร็จอย่างมากโดยที่ภาษาจำนวนมาก - และ Python ก็ไม่มีข้อยกเว้น - ให้การสนับสนุนในตัว นี่เป็นเพียงเพื่อให้ง่ายขึ้นสำหรับนักพัฒนาในการใช้กระบวนทัศน์และเพื่อให้รูปแบบมาตรฐานของการวางแนววัตถุสำหรับภาษานั้น มันเป็นหลักเหตุผลเดียวกันว่าทำไมจำนวนมากภาษาให้forห่วงถึงแม้ว่ามันอาจจะเทิดทูนใช้whileห่วงมีเพียงหนึ่งหรือสองบรรทัดรหัสเพิ่มเติม - เพียงความสะดวกในการใช้งาน


"เพื่อจัดรูปแบบวัตถุมาตรฐานสำหรับภาษานั้น" ฉันได้ยินคำวิจารณ์ของ JavaScript หรือไม่ ;)
jpmc26

1
@ jpmc26: ไม่ได้ตั้งใจ และดูเหมือนว่ามีมาตรฐานที่ยอมรับกันอย่างกว้างขวางว่าสร้างวัตถุใน JavaScript อย่างไร
Doc Brown

@overexchange: คุณมีคำถามที่จะถามหรือไม่?
Doc Brown

1
@overexchange: OOP หมายถึงอะไรที่ถกเถียงกันมีโรงเรียนแห่งความคิดที่แตกต่างกัน แต่นิยาม SICP นั้นค่อนข้างใกล้เคียงกับ 3 หัวข้อย่อยในคำถามของคุณ แน่นอนว่าเกี่ยวกับการสร้าง abstractions แต่อย่าลืมจุดที่ 2 และ 3 ใช่แนวคิด OOP ล้อมรอบ "state change" แต่มันยังอนุญาตให้มีแนวคิดของ "วัตถุที่ไม่เปลี่ยนรูป" (เช่นคลาสสตริงใน Java หรือ C #, Python มีชนิดข้อมูลที่เปลี่ยนแปลงไม่ได้และบางชนิดไม่เปลี่ยนรูปเช่นกัน) และตัวอย่างแรกของคุณในคำถามของคุณยืนยันการกำหนดเช่นเดียวกับตัวอย่างที่สองของคุณ
Doc Brown

2
@overexchange: สิ่งนี้กลับไปที่คำจำกัดความการวางแนววัตถุของ Alain Kay (ผู้ประดิษฐ์ภาษาพูดตัวเล็ก) คุณจะพบคำตอบที่ครอบคลุมในstackoverflow.com/questions/2347973/…บทความในอดีตของ SO IMHO "ข้อความที่ส่งผ่านระหว่างวัตถุ" ในความหมาย SICP นั้นหมายถึงว่าจะไม่เข้าถึงข้อมูลด้านในของวัตถุโดยตรงเพียงผ่าน "โปรโตคอลการสื่อสารที่กำหนด" เท่านั้น ในภาษา OO เช่น Python นี่อาจหมายถึง "เรียกวิธีการของวัตถุ"
Doc Brown

13

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

ฉันจะไปให้ดียิ่งขึ้นและบอกว่าการเขียนโปรแกรมเชิงวัตถุนั้นไม่ได้ขึ้นอยู่กับคำสำคัญที่ภาษาของคุณมีให้คุณสามารถเขียนโปรแกรมเชิงวัตถุใน C หากคุณต้องการ! ในความเป็นจริงเคอร์เนล linuxใช้เทคนิคดังกล่าว

สิ่งที่คุณสามารถอนุมานได้จากคำหลักของคลาสที่นี่คือภาษาให้การสนับสนุนสำหรับการสร้างแบบนี้ออกมาจากกล่องและคุณไม่จำเป็นต้องผ่านห่วงทั้งหมดเพื่อนำฟังก์ชั่นกลับมาใช้ใหม่ด้วยตัวเอง ตัวเอง!) ไม่ต้องพูดถึงวากยสัมพันธ์ทั้งหมดที่คุณอาจได้รับเช่นกัน


แล้วมรดกล่ะ เรามีความสำคัญเกี่ยวกับชนิดย่อย / supertypes ในเวลาจริงหรือไม่? วิธีแรกของฉันอาจไม่สนุกนี้ !!
แลกเปลี่ยน

5
การสืบทอดไม่ใช่วิธีที่จำเป็นสำหรับ OOP คุณสามารถนำมรดกมาใช้ในตัวอย่างแรกได้เช่นกัน มันไม่ได้ "สะอาด" มากนัก แต่เป็นไปได้เหมือนกันทั้งหมด
ช่วยให้รอด

3
@ ผู้ช่วยเหลือที่แสดงความคิดเห็นทำให้ฉันคิดว่า VB6 การวางวัตถุโดยไม่มีการสืบทอดจะทำให้โค้ดที่สะอาดน้อยลง
RubberDuck

1
@overexchange เมื่อคุณคิดถึงมันการสืบทอดคือทั้งหมดที่เกี่ยวกับการแบ่งปันรหัส / พฤติกรรมทั่วไประหว่างชั้นเรียน ไม่มีอะไรที่ห้ามไม่ให้คุณทำซ้ำรหัสนั้นตลอดเวลา จะน่ากลัวสุด ๆ เพื่อรักษาแม้ว่า มีเหตุผลที่มรดกมีอยู่ :)
ช่วยให้รอด

1
@ ผู้ช่วยชีวิตในรูปแบบพื้นฐานที่สุด "subclassing" เป็นนามธรรมที่บอกว่า "ก่อนที่คุณจะส่งคืนฟังก์ชันการจัดส่งและข้อมูลที่มีลำดับสูงกว่าฉันกำลังกำหนดที่นี่ (ซึ่งเราจะทำเป็นว่าเป็น" คลาส "ฮ่าฮ่า ฮ่า) ยกตัวอย่าง 'superclass' การส่งและข้อมูลที่มีฟังก์ชั่นที่อ้างถึงโดย ThisParentFoo " นั่นคือทั้งหมดที่มันเป็น เมื่อพูดถึงการสืบทอดมรดกที่ไร้เดียงสานั้นยังคงเป็นเรื่องจริงทั้งหมด แต่ด้วยข้อแม้ที่คุณแนะนำ "ปัญหาเพชร" ซึ่งเป็นสาเหตุที่มรดกหลายอันดูด
zxq9

9

แน่นอนคุณสามารถ!

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

คุณควรตรวจสอบhttp://www.selflanguage.org/สำหรับข้อมูลเพิ่มเติม ฉันคิดว่ามันน่าสนใจมากและถ้าคุณชอบ OOP คุณควรตรวจสอบบางสิ่งที่ไม่ธรรมดา


0

ไม่เสมอไป: ขึ้นอยู่กับภาษา คุณได้แสดงให้เห็นถึงความสามารถในการทำสิ่งนี้ใน Python แต่ (ถ้าคำถามของคุณมีความหมายว่าเป็นผู้ไม่เชื่อเรื่องภาษาแม้จะมีแท็ก Python) ก็ไม่ใช่ว่าทุกภาษาสามารถทำได้ Java เช่นส่วนใหญ่ไม่สามารถ การละเว้นคลาสที่มี main ไม่มีวิธีกำหนดเมธอด / ฟิลด์บนอ็อบเจ็กต์ที่กำหนดภายใน main โดยไม่มีคีย์เวิร์ด class แม้ว่าคลาสที่ไม่ระบุชื่อจะมีอยู่ แต่พวกเขาต้องการอินเทอร์เฟซและพวกเขาไม่สามารถมีสมาชิกสาธารณะใด ๆ ยกเว้นที่กำหนดไว้ในอินเทอร์เฟซ แม้ว่ามันจะเป็นไปได้ที่จะกำหนดอินเตอร์เฟสแบบกำหนดเองจากนั้นสร้างคลาสแบบไม่ระบุชื่อให้กับพวกมัน แต่มันก็มีประสิทธิภาพเหมือนกัน (แต่สะดวกน้อยกว่า) เพียงแค่ใช้คลาส

Doc Brown มีคำตอบที่ดี แต่ประเด็นที่ฉันพยายามทำก็คือฉันแน่ใจว่ามีภาษาอย่างน้อยหนึ่งภาษาที่จะไม่อนุญาตให้คุณแก้ปัญหาเลย


ในฐานะผู้เริ่มต้นในการเรียนรู้แนวคิด "การเขียนโปรแกรมเชิงวัตถุ" ใช่ฉันกำลังพยายามเป็นผู้ไม่เชื่อเรื่องภาษา ฉันคิดว่า "Doc Brown" ให้คำตอบในบรรทัดเดียวกันเขาบอกให้ฉันอ่าน sicp text-chap3 ซึ่งไม่เกี่ยวข้องกับไวยากรณ์ภาษาใด ๆ
แลกเปลี่ยน

ฉันหวังว่าฉันจะตั้งชื่อภาษาที่จำเป็นต้องใช้คลาสอย่างแน่นอนเพื่อตรวจสอบคำตอบของฉัน แต่ฉันรู้เพียงไม่กี่ภาษาและอนิจจา Java อนุญาตให้แก้ไขได้ C ++ มีโครงสร้างและ Javascript เป็นส่วนที่แบนช่วยให้สิ่งที่คุณแสดงให้เห็น ฉันสงสัยว่า Smalltalk และ Eiffel อาจต้องการชั้นเรียนเนื่องจากฉันได้ยินว่าพวกเขามีโครงสร้างอย่างเคร่งครัด
SkySpiral7

ในฐานะ Doc Brown ถ้าฉันเรียนรู้ oop โดยใช้รูปแบบฉันจะไม่ถามคำถามนี้ น่าเสียดายที่รุ่นของหลักสูตร SICP ที่ฉันเรียนรู้ใช้หลาม
แลกเปลี่ยน

1
ทุกโปรแกรม Java ที่ถูกต้องจะต้องมีclassคำหลักเพื่อให้ไม่แปลกใจมาก แต่คุณสามารถนำระบบวัตถุของคุณเองไปใช้กับระบบวัตถุของ Java ได้ แต่ฉันไม่รู้ว่าทำไมคุณถึงต้องการทำสิ่งนั้น
Brian Gordon

1. Java มีความพิเศษในเรื่องนี้เนื่องจากมันมีคำสำคัญอื่น ๆ ทั้งหมดที่อาจใช้เพื่อสร้างโครงสร้างข้อมูลที่กำหนดเอง ภาษาอื่นเกือบทั้งหมดที่ฉันรู้จักมีทั้งบันทึกหรือปิด 2. แม้กระทั่งในจาวาคุณสามารถตั้งโปรแกรมบนหน่วยความจำที่สร้างขึ้นจากอาเรย์ และคุณสามารถใช้การวางแนววัตถุภายในนั้นโดยใช้classคำหลักเพียงเพราะภาษาต้องการให้คุณใส่ฟังก์ชั่นของคุณในชั้นเรียน แน่นอนว่านี่เป็นทฤษฎีอย่างยิ่ง แต่ใน Java คุณสามารถทำ Object Orientation ได้โดยไม่ต้องใช้คลาส builtin!
cmaster

0

คำจำกัดความของครูอย่างสิ้นเชิงพลาดจุดสำคัญที่สุดของการเขียนโปรแกรมเชิงวัตถุสิ่งหนึ่งที่ทำให้มันมีประโยชน์และเป็นเอกลักษณ์ "การส่งข้อความ" เป็นเรื่องไร้สาระที่กลุ่มคนสมอลล์ทอล์คฝันและมันก็เป็นความล้มเหลวทุกที่ที่มันถูกลอง พลังที่แท้จริงของ OOP คือสิ่งที่เรียกว่าการทดแทน Liskovและในขณะที่แนวคิดนั้นค่อนข้างง่ายในการอธิบายและทำความเข้าใจการใช้งานพื้นฐานนั้นซับซ้อนพอที่จะเป็นไปไม่ได้ที่จะทำถูกต้องหากไม่มีการสนับสนุนระดับภาษา

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

ตัวอย่างเช่นกรอบงาน GUI ใช้การทดแทน Liskov ทั่วทุกที่ พวกเขามักจะมีControlคลาสฐานที่สามารถแสดง "การควบคุมใด ๆ " ซึ่งกำหนดอินเทอร์เฟซที่รู้เกี่ยวกับการกระทำพื้นฐานเช่นการวาดการปรับขนาดและการตอบสนองต่อการป้อนข้อมูลของผู้ใช้ ถ้าคุณคลิกที่ตัวควบคุมกรอบงาน UI จะเรียกใช้Clickเมธอดบนตัวควบคุมโดยไม่ต้องสนใจว่าเป็นตัวควบคุมชนิดใดแล้วให้ตัวควบคุมจัดการการคลิกในวิธีที่เหมาะสมสำหรับคลาสของตัวเอง การButtonควบคุมควรทำบางสิ่งที่แตกต่างไปจากเดิมอย่างสิ้นเชิงเมื่อคลิกที่ตัวTextBoxควบคุมเพื่อยกตัวอย่างเพียงตัวอย่างเดียว

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


ในภาษา C ฉันไม่สามารถพูดว่า 'struct parent {}' และ 'struct child {struct parent * ptr;}' ได้หรือไม่ นี่ไม่ใช่การสืบทอดในไวยากรณ์ภาษาที่ไม่ใช่ oop หรือไม่
แลกเปลี่ยน

@overexchange: นั่นไม่ใช่ความพยายามของ OO ที่จะปลอมมัน แต่คอมไพเลอร์จะไม่ยอมให้คุณแทนที่อันอื่น (คุณไม่สามารถส่งผ่านchild*ไปยังฟังก์ชันที่รับparent*อาร์กิวเมนต์เป็นอย่างน้อยไม่ต้องไม่มี typecast) และยิ่งแย่กว่านั้น C structs ไม่สามารถมีวิธีที่เชื่อมโยงกับพวกเขาและไม่มีการสนับสนุนวิธีเสมือนซึ่งเป็น สิ่งที่ทำให้ความมหัศจรรย์ของการทดแทน Liskov เป็นไปได้ดังนั้นคุณต้องสร้าง VMTs ด้วยมือซึ่งเป็นกระบวนการที่ซับซ้อนซึ่งง่ายต่อการผิดพลาด
Mason Wheeler

1
เคอร์เนล Linux ใช้การจำลองของเทคนิค OO หลายอย่างซึ่งทั้งหมดต้องถูกเข้ารหัสด้วยตนเองโดยไม่รองรับภาษา สิ่งนี้นำไปสู่โอกาสมากมายสำหรับข้อบกพร่องซึ่งในการเป็น Linux นั้นถูก จำกัด ด้วยการใช้กฎหมายของ Linus อย่างเสรี ใช่เป็นไปได้ที่จะทำ - ทัวริงความเท่าเทียมกันพิสูจน์เรื่องนี้ - แต่จุดของฉันที่ว่ามันยากมากที่จะได้รับสิทธิโดยไม่มีการสนับสนุนทางภาษายังคงยืนอยู่ ทำไมคำถามเหล่านี้เกี่ยวกับ C เมื่อคำถามเกี่ยวกับ Python ใน C มันเป็นไปไม่ได้ที่จะทำฟังก์ชั่นที่ซ้อนกันหลอกในสถานที่แรก
Mason Wheeler

1
@overexchange ตั้งแต่เมื่อใด Java เป็น "โปรแกรมเมอร์สวรรค์"?
Brandin

1
การส่งข้อความไม่ได้ล้มเหลวใน Smalltalk, Erlang หรือแม้แต่ระบบ OOP สไตล์ Java ที่ "ข้อความ" หมายถึงบางสิ่งที่แตกต่างจาก "การเรียกใช้ฟังก์ชัน" (สัญญาณและสล็อตของคิวทีที่มี threadsafe Que ด้วยการตลาด Java เก่า เมื่อมันหมายถึง "การเรียกเมธอด") ข้อความ! = ฟังก์ชั่นการโทร การส่งข้อความของแท้นั้นไม่เพียง แต่ประสบความสำเร็จเท่านั้น แต่ดูเหมือนเป็นวิธีเดียวที่เราจะเขียนระบบที่พร้อมกันและมีประสิทธิภาพ นี่คือมุมมองในการใช้ OOP สไตล์ Java โดยไม่มีคำหลัก 'class' มันสามารถทำได้ มันไม่ได้มีประโยชน์เสมอไป การส่งข้อความอยู่ข้างจุด
zxq9

-1

คำตอบสั้น ๆ อย่างรวดเร็ว

ใช่โปรแกรมเมอร์สามารถใช้การเขียนโปรแกรมเชิงวัตถุโดยไม่มี "คลาส"

คำอธิบายเชิงลึกที่น่าเบื่ออย่างกว้างขวาง

มีการวางแนว "Object Orientation" หลากหลายรูปแบบแนวคิดแรกที่นึกถึงโปรแกรมเมอร์คือ "Classes"

ใช่โปรแกรมเมอร์สามารถใช้การเขียนโปรแกรมเชิงวัตถุโดยไม่มี "คลาส" แต่ จำกัด เฉพาะคุณลักษณะและข้อ จำกัด จากภาษาการเขียนโปรแกรมแต่ละภาษา

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

ขณะนี้ฉันใช้วลี "การเขียนโปรแกรมเชิงวัตถุและคลาส" เพื่อระบุจากรูปแบบอื่น ๆ เช่น "การสร้างต้นแบบ" ของ Javascript หรือ Visual Basic "อิง" หรือการจำลองใน "Pure C" โดยใช้ "ฟังก์ชั่น"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.