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

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








27
อะไรคือความแตกต่างระหว่างฟังก์ชั่นนามธรรมและฟังก์ชั่นเสมือนจริง?
อะไรคือความแตกต่างระหว่างฟังก์ชั่นนามธรรมและฟังก์ชั่นเสมือนจริง? แนะนำให้ใช้ virtual หรือ abstract ในกรณีใด วิธีใดเป็นวิธีที่ดีที่สุด

30
เหตุใดจึงต้องใช้ getters และ setters / accessors
อะไรคือข้อดีของการใช้ getters และ setters - ที่รับและตั้งค่า - แทนที่จะใช้เพียงฟิลด์สาธารณะสำหรับตัวแปรเหล่านั้น หาก getters และ setters ทำมากกว่าแค่การรับ / เซตง่ายๆฉันสามารถหาอันนี้ออกมาได้อย่างรวดเร็ว แต่ฉันไม่ชัดเจน 100% ว่า: public String foo; มีอะไรที่แย่ไปกว่า: private String foo; public void setFoo(String foo) { this.foo = foo; } public String getFoo() { return foo; } ในขณะที่อดีตใช้รหัสน้อยกว่ามาก
1541 java  oop  setter  getter  abstraction 

30
ส่วนต่อประสานกับบทคัดย่อระดับ (OO ทั่วไป)
ฉันเพิ่งมีการสัมภาษณ์ทางโทรศัพท์สองครั้งเมื่อไม่นานมานี้ที่ฉันถูกถามเกี่ยวกับความแตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม ฉันได้อธิบายทุกแง่มุมของพวกเขาที่ฉันคิดได้ แต่ดูเหมือนว่าพวกเขากำลังรอให้ฉันพูดถึงบางสิ่งที่เฉพาะเจาะจงและฉันไม่รู้ว่ามันคืออะไร จากประสบการณ์ของฉันฉันคิดว่าต่อไปนี้เป็นจริง หากฉันพลาดจุดสำคัญโปรดแจ้งให้เราทราบ อินเตอร์เฟซ: ทุกวิธีเดียวที่ประกาศในอินเตอร์เฟสจะต้องนำไปใช้ในคลาสย่อย เหตุการณ์เฉพาะผู้ได้รับมอบหมายคุณสมบัติ (C #) และวิธีการเท่านั้นที่มีอยู่ในส่วนต่อประสาน ชั้นสามารถใช้อินเทอร์เฟซหลาย ระดับนามธรรม: ต้องใช้วิธีการแบบนามธรรมเท่านั้นโดยคลาสย่อย คลาสนามธรรมสามารถมีวิธีการปกติกับการใช้งาน คลาสนามธรรมยังสามารถมีตัวแปรคลาสข้างกิจกรรมผู้ได้รับมอบหมายคุณสมบัติและวิธีการ คลาสสามารถใช้คลาสนามธรรมได้เพียงคลาสเดียวเท่านั้นเนื่องจากไม่มีการสืบทอดหลายค่าใน C # หลังจากนั้นผู้สัมภาษณ์ถามคำถามว่า "จะเกิดอะไรขึ้นถ้าคุณมีคลาสนามธรรมด้วยวิธีนามธรรมเท่านั้น? สิ่งนั้นจะแตกต่างจากอินเทอร์เฟซอย่างไร" ฉันไม่รู้คำตอบ แต่ฉันคิดว่านี่เป็นมรดกตามที่กล่าวไว้ข้างต้นใช่ไหม ผู้สัมภาษณ์คนหนึ่งถามฉันว่าถ้าคุณมีตัวแปรสาธารณะในส่วนต่อประสานนั้นจะแตกต่างจากในชั้นเรียนนามธรรมอย่างไร ฉันยืนยันว่าคุณไม่สามารถมีตัวแปรสาธารณะภายในอินเทอร์เฟซ ฉันไม่รู้ว่าเขาต้องการได้ยินอะไร แต่เขาก็ไม่พอใจเช่นกัน ดูเพิ่มเติมที่ : ใช้อินเทอร์เฟซแทนคลาสนามธรรมและในทางกลับกันเมื่อใด การเชื่อมต่อกับชั้นเรียนนามธรรม คุณตัดสินใจเลือกระหว่างการใช้คลาสนามธรรมและอินเทอร์เฟซอย่างไร อะไรคือความแตกต่างระหว่างอินเตอร์เฟสและคลาสนามธรรม?

27
ทำไมไม่สืบทอดจากรายการ <T>
เมื่อวางแผนโปรแกรมของฉันฉันมักจะเริ่มต้นด้วยความคิดอย่าง: ทีมฟุตบอลเป็นเพียงรายชื่อผู้เล่นฟุตบอล ดังนั้นฉันควรเป็นตัวแทนด้วย: var football_team = new List&lt;FootballPlayer&gt;(); การเรียงลำดับของรายการนี้แสดงถึงลำดับที่ผู้เล่นแสดงไว้ในบัญชีรายชื่อ แต่ฉันตระหนักในภายหลังว่าทีมยังมีคุณสมบัติอื่น ๆ นอกเหนือจากรายชื่อผู้เล่นที่ต้องบันทึกไว้ ตัวอย่างเช่นคะแนนรวมที่ดำเนินการอยู่ในฤดูกาลนี้งบประมาณปัจจุบันสีสม่ำเสมอstringชื่อตัวแทนของทีม ฯลฯ ดังนั้นฉันคิดว่า: โอเคทีมฟุตบอลก็เหมือนกับรายการของผู้เล่น แต่นอกจากนี้ยังมีชื่อ (a string) และคะแนนรวมทั้งหมด (an int) .NET ไม่มีคลาสสำหรับเก็บทีมฟุตบอลดังนั้นฉันจะสร้างคลาสของตัวเอง โครงสร้างที่มีอยู่ที่คล้ายกันและเกี่ยวข้องมากที่สุดคือList&lt;FootballPlayer&gt;ดังนั้นฉันจะสืบทอดจากมัน: class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } แต่มันกลับกลายเป็นว่าแนวทางในการพูดว่าคุณไม่ควรสืบทอดมาจาก List&lt;T&gt;ฉันสับสนอย่างละเอียดโดยแนวทางนี้สองประการ ทำไมจะไม่ล่ะ? เห็นได้ชัดว่ามีการเพิ่มประสิทธิภาพอย่างใดเพื่อให้ได้ประสิทธิภาพList งั้นเหรอ ฉันจะทำให้เกิดปัญหาประสิทธิภาพการทำงานถ้าฉันขยายList? จะเกิดอะไรขึ้น เหตุผลที่ผมเคยเห็นก็คือการที่Listให้บริการโดยไมโครซอฟท์และผมสามารถควบคุมมันไม่ได้ดังนั้นฉันไม่สามารถเปลี่ยนได้ในภายหลังหลังจากเปิดเผย "ประชาชน API" แต่ฉันพยายามเข้าใจสิ่งนี้ API สาธารณะคืออะไรและทำไมฉันจึงควรใส่ใจ …
1398 c#  .net  list  oop  inheritance 

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

7
อะไรคือความแตกต่างระหว่าง type () และ isinstance ()?
อะไรคือความแตกต่างระหว่างส่วนย่อยของโค้ดทั้งสองนี้ การใช้type(): import types if type(a) is types.DictType: do_something() if type(b) in types.StringTypes: do_something_else() การใช้isinstance(): if isinstance(a, dict): do_something() if isinstance(b, str) or isinstance(b, unicode): do_something_else()
1247 python  oop  inheritance  types 

6
คลาส Python สืบทอดวัตถุ
มีเหตุผลใดสำหรับการประกาศคลาสเพื่อสืบทอดจากobject? ฉันเพิ่งพบรหัสบางอย่างที่ทำสิ่งนี้และฉันไม่สามารถหาเหตุผลที่ดีได้ class MyClass(object): # class code follows...
1243 python  class  oop  object  inheritance 

13
การตั้งชื่อคลาส - วิธีหลีกเลี่ยงการเรียกทุกอย่างว่า“ <WhatEver> Manager” ได้อย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม &amp; คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา นานมาแล้วฉันได้อ่านบทความ (ฉันเชื่อว่ารายการบล็อก) ซึ่งทำให้ฉัน "ติดตาม" ขวาบนวัตถุการตั้งชื่อ: ระมัดระวังมากเกี่ยวกับการตั้งชื่อสิ่งต่าง ๆ ในโปรแกรมของคุณ ตัวอย่างเช่นหากแอปพลิเคชันของฉัน (เป็นแอปทางธุรกิจทั่วไป) ที่จัดการผู้ใช้ บริษัท และที่อยู่ที่ฉันมีคลาสUsera Companyและa Addressโดเมนและอาจเป็นที่ไหนสักแห่งUserManagera CompanyManagerและa AddressManagerจะปรากฏขึ้นเพื่อจัดการกับสิ่งเหล่านั้น ดังนั้นคุณสามารถบอกบรรดาสิ่งUserManager, CompanyManagerและAddressManagerทำอย่างไร ไม่เพราะผู้จัดการเป็นคำทั่วไปที่เหมาะกับทุกสิ่งที่คุณสามารถทำได้กับวัตถุโดเมนของคุณ บทความที่ฉันอ่านแนะนำโดยใช้ชื่อเฉพาะมาก ถ้ามันเป็นแอพพลิเคชั่น C ++ และUserManagerงานของมันถูกจัดสรรและปลดปล่อยผู้ใช้จากฮีปมันจะไม่จัดการผู้ใช้ แต่ปกป้องการเกิดและความตาย อืมเราอาจเรียกมันUserShepherdว่า หรืออาจจะUserManagerเป็นหน้าที่ของการตรวจสอบข้อมูลของวัตถุผู้ใช้แต่ละคนและลงนามในข้อมูลการเข้ารหัส UserRecordsClerkแล้วเราต้องการมี ตอนนี้ความคิดนี้ติดอยู่กับฉันฉันพยายามที่จะใช้มัน และพบว่าความคิดที่เรียบง่ายนี้ยากอย่างน่าอัศจรรย์ ฉันสามารถอธิบายสิ่งที่เรียนทำและ (ตราบเท่าที่ฉันไม่ได้แอบเข้าไปอย่างรวดเร็วและสกปรกเข้ารหัส) เรียนที่ผมเขียนทำสิ่งหนึ่งสิ่ง สิ่งที่ฉันพลาดไปจากคำอธิบายนั้นไปยังชื่อเป็นประเภทของชื่อคำศัพท์ที่แมปแนวคิดกับชื่อ ในที่สุดฉันต้องการมีแคตตาล็อกรูปแบบในใจของฉัน (บ่อยครั้งที่รูปแบบการออกแบบให้ชื่อวัตถุได้ง่ายเช่นโรงงาน ) โรงงาน - สร้างวัตถุอื่น ๆ …

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