คำถามติดแท็ก oop

การเขียนโปรแกรมเชิงวัตถุเป็นกระบวนทัศน์การเขียนโปรแกรมโดยใช้ "วัตถุ": โครงสร้างข้อมูลประกอบด้วยเขตข้อมูลและวิธีการร่วมกับการโต้ตอบของพวกเขา

22
จุดประสงค์ของคำว่า 'ตัวเอง' คืออะไร?
วัตถุประสงค์ของselfคำใน Python คืออะไร? ฉันเข้าใจว่ามันหมายถึงวัตถุเฉพาะที่สร้างขึ้นจากคลาสนั้น แต่ฉันไม่สามารถดูได้ว่าทำไมจึงต้องเพิ่มอย่างชัดเจนในทุกฟังก์ชั่นเป็นพารามิเตอร์ เพื่อแสดงใน Ruby ฉันสามารถทำสิ่งนี้: class myClass def myFunc(name) @name = name end end ซึ่งฉันเข้าใจค่อนข้างง่าย อย่างไรก็ตามใน Python ฉันต้องรวมself: class myClass: def myFunc(self, name): self.name = name ทุกคนสามารถพูดคุยกับฉันผ่านสิ่งนี้ได้ไหม? มันไม่ใช่สิ่งที่ฉันได้เจอในประสบการณ์ของฉัน
1130 python  class  oop  self 

28
ฟังก์ชั่นโปรแกรมแทนรูปแบบการออกแบบของ GoF หรือไม่?
ตั้งแต่ฉันเริ่มเรียนรู้F #และOCamlเมื่อปีที่แล้วฉันได้อ่านบทความจำนวนมากที่ยืนยันว่ารูปแบบการออกแบบ (โดยเฉพาะใน Java) เป็นวิธีแก้ปัญหาสำหรับคุณสมบัติที่ขาดหายไปในภาษาที่จำเป็น บทความหนึ่งที่ฉันพบมีการอ้างสิทธิ์ค่อนข้างแรง : คนส่วนใหญ่ที่ฉันพบเจอได้อ่าน หนังสือรูปแบบการออกแบบโดย Gang of Four (GoF) โปรแกรมเมอร์ที่เคารพตนเองจะบอกคุณว่าหนังสือเล่มนี้เป็นผู้ไม่เชื่อเรื่องภาษาและรูปแบบที่ใช้กับวิศวกรรมซอฟต์แวร์โดยทั่วไปไม่ว่าคุณจะใช้ภาษาใด นี่คือการเรียกร้องอันสูงส่ง น่าเสียดายที่มันห่างไกลจากความจริง ภาษาหน้าที่มีความหมายอย่างมาก ในภาษาที่ใช้งานได้เราไม่จำเป็นต้องมีรูปแบบการออกแบบเพราะภาษานั้นมีระดับสูงมากดังนั้นคุณจึงต้องเขียนโปรแกรมในแนวคิดที่กำจัดรูปแบบการออกแบบทั้งหมดเข้าด้วยกัน คุณสมบัติหลักของ functional programming (FP) รวมถึงฟังก์ชั่นเป็นค่าชั้นหนึ่ง, currying, ค่าที่ไม่เปลี่ยนรูปแบบ ฯลฯ ฉันไม่เห็นว่ารูปแบบการออกแบบ OO ใกล้เคียงกับคุณลักษณะใด ๆ เหล่านั้น นอกจากนี้ในภาษาที่ใช้งานได้ซึ่งสนับสนุน OOP (เช่น F # และ OCaml) ดูเหมือนว่าสำหรับฉันแล้วโปรแกรมเมอร์ที่ใช้ภาษาเหล่านี้จะใช้รูปแบบการออกแบบเดียวกันกับภาษา OOP อื่น ๆ อันที่จริงตอนนี้ฉันใช้ F # และ OCaml ทุกวันและไม่มีความแตกต่างที่โดดเด่นระหว่างรูปแบบที่ฉันใช้ในภาษาเหล่านี้กับรูปแบบที่ฉันใช้เมื่อฉันเขียนด้วย Java มีความจริงใด …


17
ความแตกต่างระหว่างสาธารณะส่วนตัวและได้รับการคุ้มครองคืออะไร
เมื่อไหร่และทำไมฉันจึงควรใช้public, privateและprotectedฟังก์ชั่นและตัวแปรภายในชั้นเรียน? ความแตกต่างระหว่างพวกเขาคืออะไร? ตัวอย่าง: // Public public $variable; public function doSomething() { // ... } // Private private $variable; private function doSomething() { // ... } // Protected protected $variable; protected function doSomething() { // ... }
988 php  oop  private  public  protected 

16
มิกซ์อินคืออะไรและทำไมจึงมีประโยชน์
ใน " Programming Python " Mark Markz พูดถึง "mixins" ฉันมาจากพื้นหลัง C / C ++ / C # และฉันไม่เคยได้ยินคำศัพท์มาก่อน มิกซ์อินคืออะไร? การอ่านระหว่างบรรทัดของตัวอย่างนี้ (ซึ่งฉันเชื่อมโยงเพราะมันค่อนข้างยาว) ฉันคิดว่ามันเป็นกรณีของการใช้การสืบทอดหลาย ๆ แบบเพื่อขยายชั้นเรียนซึ่งตรงข้ามกับการทำคลาสย่อย 'ที่เหมาะสม' ถูกต้องหรือไม่ เหตุใดฉันจึงต้องการทำเช่นนั้นแทนที่จะใส่ฟังก์ชันใหม่ลงในคลาสย่อย สำหรับเรื่องนั้นทำไมการผสมผสานมิกซ์ / การสืบทอดหลายวิธีจึงดีกว่าการใช้การแต่งเพลง? อะไรคือสิ่งที่แยกมิกซ์อินจากการสืบทอดหลาย ๆ ด้าน? มันเป็นเพียงเรื่องของความหมายหรือไม่?


30
ตัวอย่างของหลักการชดเชย Liskov คืออะไร?
ฉันได้ยินมาว่าหลักการแทน Liskov (LSP) เป็นหลักการพื้นฐานของการออกแบบเชิงวัตถุ มันคืออะไรและมีตัวอย่างของการใช้งานอะไรบ้าง?

30
“ โปรแกรมไปยังส่วนต่อประสาน” หมายความว่าอย่างไร
ฉันเคยเห็นสิ่งนี้พูดถึงสองสามครั้งและฉันไม่ชัดเจนในความหมายของมัน คุณจะทำสิ่งนี้เมื่อใดและเพราะเหตุใด ฉันรู้ว่าอินเตอร์เฟสทำอะไร แต่ความจริงแล้วฉันไม่ชัดเจนในเรื่องนี้ทำให้ฉันคิดว่าฉันพลาดการใช้งานอย่างถูกต้อง เป็นเช่นนั้นถ้าคุณต้องทำ: IInterface classRef = new ObjectWhatever() คุณสามารถใช้คลาสใดก็ได้ที่ใช้IInterface? คุณจะต้องทำเมื่อไหร่ IInterfaceสิ่งเดียวที่ฉันสามารถคิดคือถ้าคุณมีวิธีการและคุณไม่แน่ใจว่าวัตถุจะถูกส่งผ่านยกเว้นสำหรับการดำเนินการ ฉันไม่สามารถคิดได้ว่าคุณจะต้องทำบ่อยแค่ไหน นอกจากนี้คุณจะเขียนวิธีที่ใช้ในวัตถุที่ใช้อินเทอร์เฟซได้อย่างไร เป็นไปได้ไหม

8
วิธีการจัดเรียงรายการวัตถุตามคุณลักษณะของวัตถุ?
ฉันมีรายการของวัตถุ Python ที่ฉันต้องการเรียงลำดับตามคุณสมบัติของวัตถุนั้น ๆ รายการดูเหมือนว่า: >>> ut [<Tag: 128>, <Tag: 2008>, <Tag: <>, <Tag: actionscript>, <Tag: addresses>, <Tag: aes>, <Tag: ajax> ...] แต่ละวัตถุมีจำนวน: >>> ut[1].count 1L ฉันต้องการเรียงลำดับรายการตามจำนวนการนับจากมากไปน้อย ฉันได้เห็นวิธีการหลายอย่างนี้แล้ว แต่ฉันกำลังมองหาแนวปฏิบัติที่ดีที่สุดใน Python
804 python  list  sorting  oop  count 

18
__init__ และตัวเองทำอะไรกับ Python
ฉันเรียนรู้ภาษา Python และฉันเจอบางอย่างที่ฉันไม่เข้าใจ ในวิธีการเช่น: def method(self, blah): def __init__(?): .... .... อะไร selfทำอย่างไร มันหมายความว่าอะไร จำเป็นหรือไม่ อะไร __init__วิธีการทำอย่างไร ทำไมถึงจำเป็น? (อื่น ๆ ) ฉันคิดว่าพวกเขาอาจเป็น OOP ที่สร้างขึ้นมา แต่ฉันไม่รู้มาก
792 python  oop  self 

4
ฟังก์ชั่นการเขียนโปรแกรมเทียบกับการเขียนโปรแกรมเชิงวัตถุ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ฉันได้รับส่วนใหญ่สัมผัสกับการเขียนโปรแกรม OO เพื่อให้ห่างไกลและฉันหวังว่าจะได้เรียนรู้ภาษาที่ใช้งานได้ คำถามของฉันคือ: คุณจะเลือกการเขียนโปรแกรมการทำงานมากกว่าวัตถุเชิง? อะไรคือคำจำกัดความของปัญหาทั่วไปที่การตั้งโปรแกรมการทำงานเป็นตัวเลือกที่ดีกว่า

30
ส่วนต่อประสานกับคลาสฐาน
ฉันควรใช้อินเทอร์เฟซเมื่อใดและควรใช้คลาสพื้นฐานเมื่อใด ควรเป็นอินเทอร์เฟซเสมอหรือไม่หากฉันไม่ต้องการกำหนดวิธีการใช้งานพื้นฐาน ถ้าฉันมีคลาส Dog และ Cat เหตุใดฉันจึงต้องการใช้งาน IPet แทน PetBase ฉันสามารถเข้าใจว่ามีอินเตอร์เฟสสำหรับ ISheds หรือ IBarks (IMakesNoise?) เพราะสามารถวางสัตว์เลี้ยงบนพื้นฐานของสัตว์เลี้ยงได้ แต่ฉันไม่เข้าใจว่าจะใช้สัตว์เลี้ยงทั่วไปชนิดใด

11
การใช้ __slots__?
อะไรคือจุดประสงค์__slots__ใน Python - โดยเฉพาะอย่างยิ่งเมื่อฉันต้องการใช้และเมื่อไม่ต้องการ?

19
Monad ในภาษาอังกฤษธรรมดา? (สำหรับโปรแกรมเมอร์ OOP ที่ไม่มีพื้นหลัง FP)
ในแง่ที่โปรแกรมเมอร์ OOP จะเข้าใจ (ไม่มีพื้นหลังการเขียนโปรแกรมการทำงาน) monad คืออะไร? แก้ปัญหาอะไรได้บ้างและสถานที่ที่ใช้บ่อยที่สุดคืออะไร แก้ไข: เพื่อให้เข้าใจถึงชนิดของความเข้าใจที่ฉันกำลังมองหาสมมติว่าคุณกำลังแปลงแอปพลิเคชัน FP ที่มี monads เป็นแอปพลิเคชัน OOP คุณจะทำอย่างไรในการโอนย้ายความรับผิดชอบของพระสงฆ์ไปยังแอป OOP


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