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

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

22
วิธีเปรียบเทียบวัตถุด้วยหลาย ๆ ฟิลด์
สมมติว่าคุณมีวัตถุบางอย่างที่มีหลายฟิลด์สามารถเปรียบเทียบได้โดย: public class Person { private String firstName; private String lastName; private String age; /* Constructors */ /* Methods */ } ดังนั้นในตัวอย่างนี้เมื่อคุณถามว่า: a.compareTo(b) > 0 คุณอาจจะถามว่านามสกุลมาก่อน b หรือไม่หรือว่าเก่ากว่า b เป็นต้น อะไรคือวิธีที่สะอาดที่สุดในการเปิดใช้การเปรียบเทียบหลายอย่างระหว่างวัตถุประเภทนี้โดยไม่เพิ่มความยุ่งเหยิงหรือค่าใช้จ่ายที่ไม่จำเป็น? java.lang.Comparable อินเตอร์เฟสอนุญาตให้ทำการเปรียบเทียบโดยหนึ่งฟิลด์เท่านั้น การเพิ่มวิธีการเปรียบเทียบจำนวนมาก (เช่นcompareByFirstName(), compareByAge()ฯลฯ ... ) มีความยุ่งเหยิงในความคิดของฉัน ดังนั้นวิธีที่ดีที่สุดที่จะไปเกี่ยวกับเรื่องนี้คืออะไร?
237 java  oop 

23
คุณออกแบบโครงการเชิงวัตถุได้อย่างไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันกำลังทำงานในโครงการขนาดใหญ่ (สำหรับฉัน) ซึ่งจะมีหลายชั้นเรียนและจะต้องขยายออกไป แต่ฉันไม่แน่ใจว่าจะวางแผนโปรแกรมของฉันอย่างไรและวิธีที่ชั้นเรียนต้องมีปฏิสัมพันธ์ ฉันเรียนหลักสูตร OOD สองสามภาคเรียนและเรียนรู้มากมายจากหลักสูตรนั้น เช่นการเขียน UML และแปลเอกสารข้อกำหนดเป็นวัตถุและคลาส เราเรียนรู้แผนภาพลำดับด้วยเช่นกัน แต่อย่างใดฉันพลาดการบรรยายหรือบางอย่างพวกเขาไม่ยึดติดกับฉัน กับโครงการก่อนหน้านี้ฉันได้ลองใช้วิธีการที่ฉันเรียนรู้จากหลักสูตร แต่มักจะจบลงด้วยรหัสที่ทันทีที่ฉันสามารถพูดว่า "ใช่ที่ดูเหมือนสิ่งที่ฉันมีในใจ" ฉันไม่มีความปรารถนาที่จะขุดผ่านโคลนเพื่อเพิ่ม คุณสมบัติใหม่ ฉันได้รับสำเนาสมบูรณ์ของรหัสสตีฟ McConnell ซึ่งฉันได้ยินอย่างต่อเนื่องเป็นที่น่าอัศจรรย์ที่นี่และที่อื่น ๆ ฉันอ่านบทเกี่ยวกับการออกแบบและดูเหมือนจะไม่เปิดเผยข้อมูลที่ฉันต้องการ ฉันรู้ว่าเขาบอกว่ามันไม่ได้เป็นกระบวนการที่แห้งและแห้งซึ่งส่วนใหญ่มาจากการวิเคราะห์พฤติกรรม แต่ฉันไม่สามารถรับข้อมูลทั้งหมดของเขาและนำไปใช้กับโครงการของฉันได้ ดังนั้นสิ่งที่เป็นสิ่งที่คุณทำในช่วงการออกแบบระดับสูง (ก่อนที่คุณจะเริ่มต้นการเขียนโปรแกรม) เพื่อตรวจสอบสิ่งที่เป็นชั้นเรียนที่คุณจำเป็นต้อง (โดยเฉพาะคนที่ไม่ได้ขึ้นอยู่ที่ใด 'วัตถุโลกแห่งความจริง') และวิธีการที่พวกเขาจะโต้ตอบกับแต่ละอื่น ๆ ? โดยเฉพาะฉันสนใจวิธีการที่คุณใช้? อะไรคือกระบวนการที่คุณทำตามซึ่งโดยปกติแล้วการออกแบบที่ดีและสะอาดซึ่งจะนำเสนอผลิตภัณฑ์ขั้นสุดท้ายอย่างใกล้ชิด?

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

15
จุดเชื่อมต่อใน PHP คืออะไร?
การเชื่อมต่อช่วยให้คุณสามารถสร้างรหัสซึ่งกำหนดวิธีการเรียนที่ใช้มัน อย่างไรก็ตามคุณไม่สามารถเพิ่มรหัสใด ๆ ลงในวิธีการเหล่านั้นได้ คลาสนามธรรมช่วยให้คุณทำสิ่งเดียวกันพร้อมกับเพิ่มรหัสไปยังวิธีการ ตอนนี้ถ้าคุณสามารถบรรลุเป้าหมายเดียวกันกับคลาสนามธรรมทำไมเราถึงต้องมีแนวคิดของอินเทอร์เฟซ? ฉันได้รับการบอกว่ามันเกี่ยวข้องกับทฤษฎี OO จาก C ++ ถึง Java ซึ่งเป็นสิ่งที่ OO ของ PHP ตั้งอยู่ แนวคิดมีประโยชน์ใน Java แต่ไม่ใช่ใน PHP หรือไม่ มันเป็นเพียงวิธีที่จะป้องกันไม่ให้ตัวยึดในชั้นนามธรรม? ฉันพลาดอะไรไปรึเปล่า?
224 php  oop  interface  theory 

12
เป็นวิธีที่ดีที่สุดในการรวมวัตถุ PHP สองคืออะไร
เรามีวัตถุ PHP5 สองรายการและต้องการที่จะรวมเนื้อหาของหนึ่งเป็นสอง ไม่มีแนวคิดของคลาสย่อยระหว่างกันดังนั้นโซลูชันที่อธิบายในหัวข้อต่อไปนี้ไม่สามารถใช้ได้ คุณจะคัดลอกวัตถุ PHP ลงในประเภทวัตถุอื่นได้อย่างไร //We have this: $objectA->a; $objectA->b; $objectB->c; $objectB->d; //We want the easiest way to get: $objectC->a; $objectC->b; $objectC->c; $objectC->d; หมายเหตุ: นี่คือวัตถุไม่ใช่คลาส วัตถุมีเขตข้อมูลค่อนข้างมากดังนั้นforeachจะค่อนข้างช้า จนถึงตอนนี้เราพิจารณาเปลี่ยนวัตถุ A และ B เป็นอาร์เรย์แล้วรวมเข้าด้วยarray_merge ()ก่อนที่จะเปลี่ยนเป็นวัตถุใหม่ แต่เราไม่สามารถพูดได้ว่าเราภูมิใจในสิ่งนี้
222 php  oop  object 


15
ฟังก์ชัน Python โอเวอร์โหลด
ฉันรู้ว่า Python ไม่รองรับการบรรทุกเกินพิกัด แต่ฉันพบปัญหาที่ฉันไม่สามารถแก้ไขได้ด้วยวิธี Pythonic ที่ดี ฉันกำลังสร้างเกมที่ตัวละครต้องยิงกระสุนหลากหลายแบบ แต่ฉันจะเขียนฟังก์ชั่นต่าง ๆ เพื่อสร้างกระสุนได้อย่างไร ตัวอย่างเช่นสมมติว่าฉันมีฟังก์ชั่นที่สร้างสัญลักษณ์แสดงหัวข้อย่อยเดินทางจากจุด A ถึง B ด้วยความเร็วที่กำหนด ฉันจะเขียนฟังก์ชั่นเช่นนี้: def add_bullet(sprite, start, headto, speed): ... Code ... แต่ฉันต้องการที่จะเขียนฟังก์ชั่นอื่น ๆ สำหรับการสร้างกระสุนเช่น: def add_bullet(sprite, start, direction, speed): def add_bullet(sprite, start, headto, spead, acceleration): def add_bullet(sprite, script): # For bullets that are controlled by a script …

13
เหตุใด C ++ STL จึงขึ้นอยู่กับเทมเพลตเป็นอย่างมาก (และไม่ได้อยู่ใน * อินเตอร์เฟส *)
ฉันหมายถึงนอกเหนือจากชื่อหน้าที่ (ไลบรารีเทมเพลตมาตรฐาน) ... C ++ เริ่มแรกมีจุดประสงค์เพื่อนำเสนอแนวคิดของ OOP ใน C นั่นคือ: คุณสามารถบอกได้ว่าเอนทิตีที่เฉพาะเจาะจงสามารถทำได้และไม่สามารถทำได้ องค์ประกอบของความสามารถบางอย่างยากที่จะอธิบายในลักษณะนี้เนื่องจากปัญหาของการถ่ายทอดทางพันธุกรรมที่หลากหลายและความจริงที่ว่า C ++ รองรับแนวคิดของอินเตอร์เฟสในทางที่ค่อนข้างงุ่มง่าม (เทียบกับ java และอื่น ๆ ) แต่มันมี (และอาจเป็น การปรับปรุง) จากนั้นเทมเพลตก็เข้ามาเล่นพร้อมกับ STL STL ดูเหมือนจะใช้แนวคิด OOP แบบดั้งเดิมและล้างลงในท่อระบายน้ำโดยใช้แม่แบบแทน ควรมีความแตกต่างระหว่างกรณีเมื่อแม่แบบที่ใช้ในการพูดคุยประเภทที่ชุดรูปแบบประเภทที่ไม่เกี่ยวข้องสำหรับการดำเนินงานของแม่แบบ (ภาชนะบรรจุตัวอย่างเช่น) มีvector<int>ความรู้สึกที่สมบูรณ์แบบ อย่างไรก็ตามในกรณีอื่น ๆ (ตัววนซ้ำและอัลกอริทึม) ประเภทของเทมเพลตควรเป็นไปตาม "แนวคิด" (อินพุต Iterator, Forward Iterator เป็นต้น ... ) ซึ่งรายละเอียดที่แท้จริงของแนวคิดถูกกำหนดโดยการนำเทมเพลตมาใช้ทั้งหมด ฟังก์ชั่น / ชั้นเรียนและไม่ตามระดับของประเภทที่ใช้กับแม่แบบซึ่งค่อนข้างต่อต้านการใช้งานของ OOP ตัวอย่างเช่นคุณสามารถบอกฟังก์ชั่น: …
211 c++  oop  templates  stl 


3
ต้นแบบที่ใช้กับการสืบทอดตามคลาส
ใน JavaScript วัตถุทุกตัวในเวลาเดียวกันเป็นอินสแตนซ์และคลาส ในการรับมรดกคุณสามารถใช้อินสแตนซ์ของวัตถุใด ๆ ก็ได้เป็นต้นแบบ ใน Python, C ++ ฯลฯ มีคลาสและอินสแตนซ์เป็นแนวคิดแยกต่างหาก ในการทำการสืบทอดคุณต้องใช้คลาสฐานเพื่อสร้างคลาสใหม่ซึ่งสามารถใช้เพื่อสร้างอินสแตนซ์ที่ได้รับ ทำไม JavaScript ไปในทิศทางนี้ (การวางวัตถุตามต้นแบบ) อะไรคือข้อดี (และข้อเสีย) ของต้นแบบ OO ที่เกี่ยวกับแบบดั้งเดิม OO แบบคลาส?

22
เหตุใด C # จึงไม่มีคำหลัก 'เพื่อน' สไตล์ C ++ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เพื่อนคำหลัก C ++ช่วยให้ผู้class Aที่จะกำหนดให้class Bเป็นเพื่อนของตน นี้จะช่วยให้Class Bการเข้าถึงprivate/ สมาชิกของprotectedclass A ฉันไม่เคยอ่านอะไรเลยว่าทำไมสิ่งนี้ถึงถูกทิ้งไว้ใน C # (และ VB.NET) คำตอบส่วนใหญ่ของคำถาม StackOverflow ก่อนหน้านี้ดูเหมือนจะบอกว่าเป็นส่วนที่มีประโยชน์ของ C ++ และมีเหตุผลที่ดีที่จะใช้ จากประสบการณ์ของฉันฉันต้องยอมรับ คำถามอื่นดูเหมือนว่าฉันจะถามจริง ๆ ว่าจะทำสิ่งที่คล้ายกับfriendในใบสมัคร C # ในขณะที่คำตอบโดยทั่วไปจะหมุนรอบคลาสที่ซ้อนกัน แต่ก็ไม่ได้ดูสวยงามเท่าการใช้friendคำหลัก หนังสือรูปแบบการออกแบบดั้งเดิมใช้เป็นประจำตลอดตัวอย่าง สรุปแล้วทำไมfriendหายไปจาก C # และอะไรคือ "วิธีปฏิบัติที่ดีที่สุด" (หรือวิธี) ในการจำลองใน C # (โดยวิธีการที่internalคำหลักไม่ได้ในสิ่งเดียวกันจะช่วยให้ทุกชั้นเรียนภายในทั้งการชุมนุมในการเข้าถึงinternalสมาชิกในขณะที่friendช่วยให้คุณสามารถที่จะให้ชั้นหนึ่งการเข้าถึงที่สมบูรณ์ไปอีกหนึ่งระดับอื่น ๆ )
208 c#  c++  design-patterns  oop  friend 

4
ทำความเข้าใจความแตกต่างระหว่าง __getattr__ และ __getattribute__
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่าง__getattr__และ__getattribute__อย่างไรก็ตามฉันล้มเหลว คำตอบของคำถามกองมากเกินความแตกต่างระหว่าง__getattr__VS__getattribute__พูดว่า: __getattribute__ถูกเรียกใช้ก่อนที่จะดูแอตทริบิวต์ที่แท้จริงของวัตถุและอาจมีความยุ่งยากในการใช้อย่างถูกต้อง คุณสามารถจบด้วยการเรียกซ้ำแบบไม่สิ้นสุดได้อย่างง่ายดายมาก ฉันไม่รู้ว่ามันแปลว่าอะไร จากนั้นจะกล่าวต่อไปว่า: __getattr__คุณเกือบจะแน่นอนต้องการ ทำไม? ฉันอ่านว่าถ้า__getattribute__ล้มเหลว__getattr__ถูกเรียก เหตุใดจึงมีสองวิธีที่แตกต่างกันในการทำสิ่งเดียวกัน หากรหัสของฉันใช้คลาสสไตล์ใหม่ฉันควรใช้อะไร ฉันกำลังมองหาตัวอย่างโค้ดเพื่อล้างคำถามนี้ ฉันใช้ Google อย่างดีที่สุดเพื่อความสามารถของฉัน แต่คำตอบที่ฉันพบไม่ได้พูดถึงปัญหาอย่างถี่ถ้วน หากมีเอกสารใด ๆ ฉันพร้อมที่จะอ่าน

10
ฉันจะประกาศคุณสมบัติระดับคลาสใน Objective-C ได้อย่างไร
อาจจะชัดเจน แต่ฉันไม่รู้วิธีประกาศคุณสมบัติของคลาสใน Objective-C ฉันต้องการแคชพจนานุกรมต่อชั้นเรียนและสงสัยว่าจะใส่ไว้ในชั้นเรียนได้อย่างไร
205 objective-c  cocoa  oop 


9
ทำไมรหัสไพ ธ อนจึงใช้ฟังก์ชัน len () แทนที่จะเป็นวิธีความยาว
ฉันรู้ว่าหลามมีlen()ฟังก์ชั่นที่ใช้ในการกำหนดขนาดของสตริง แต่ฉันสงสัยว่าทำไมมันไม่ได้เป็นวิธีการของวัตถุสตริง ปรับปรุง ตกลงฉันรู้ว่าฉันผิดพลาดอย่างน่าอาย __len__()จริง ๆ แล้วเป็นวิธีการของวัตถุสตริง ดูเหมือนว่าแปลกที่จะเห็นโค้ดเชิงวัตถุใน Python โดยใช้ฟังก์ชัน len บนวัตถุสตริง นอกจากนี้ยังเป็นเรื่องแปลกที่จะเห็น__len__ว่าเป็นชื่อแทนที่จะเป็นเพียง len

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