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

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

7
ฉันจะรับชื่อคลาสจากการเรียกแบบคงที่ในคลาส PHP เพิ่มเติมได้อย่างไร
ฉันมีสองคลาส: ActionและMyAction. หลังถูกประกาศเป็น: class MyAction extends Action {/* some methods here */} สิ่งที่ฉันต้องการคือเมธอดในActionคลาส (เฉพาะในนั้นเนื่องจากจะมีคลาสที่สืบทอดมาจำนวนมากและฉันไม่ต้องการใช้เมธอดนี้ในทุกคลาส) ซึ่งจะส่งคืนชื่อคลาสจากการเรียกแบบคงที่ นี่คือสิ่งที่ฉันกำลังพูดถึง: Class Action { function n(){/* something */} } และเมื่อฉันเรียกมันว่า: MyAction::n(); // it should return "MyAction" แต่การประกาศแต่ละครั้งในคลาสพาเรนต์มีสิทธิ์เข้าถึงเฉพาะ__CLASS__ตัวแปรคลาสพาเรนต์ซึ่งมีค่า“ Action” มีวิธีใดบ้างที่เป็นไปได้ในการดำเนินการนี้
93 php  oop  inheritance 

9
ภาษาการเขียนโปรแกรมเชิงฟังก์ชันทำงานอย่างไร
หากภาษาโปรแกรมที่ใช้งานได้ไม่สามารถบันทึกสถานะใด ๆ ได้พวกเขาจะทำสิ่งง่ายๆเช่นการอ่านอินพุตจากผู้ใช้อย่างไร พวกเขา "จัดเก็บ" อินพุต (หรือจัดเก็บข้อมูลสำหรับเรื่องนั้นอย่างไร) ตัวอย่างเช่นสิ่งที่ C ง่ายๆนี้จะแปลเป็นภาษาโปรแกรมที่ใช้งานได้เช่น Haskell ได้อย่างไร #include<stdio.h> int main() { int no; scanf("%d",&no); return 0; } (คำถามของฉันได้รับแรงบันดาลใจจากโพสต์ที่ยอดเยี่ยมนี้: "Execution in the Kingdom of Nouns" การอ่านมันทำให้ฉันเข้าใจดีขึ้นว่าการเขียนโปรแกรมเชิงวัตถุคืออะไร Java ใช้งานอย่างไรในลักษณะที่รุนแรงและภาษาโปรแกรมที่ใช้งานได้นั้นเป็นอย่างไร ตรงกันข้าม)

6
Polymorphism ใน Javascript คืออะไร?
ผมได้อ่านบทความที่เป็นไปได้บางอย่างที่ฉันสามารถพบได้บนอินเทอร์เน็ตในหลายรูปแบบ แต่ฉันคิดว่าฉันไม่สามารถเข้าใจความหมายและความสำคัญของมันได้ บทความส่วนใหญ่ไม่ได้บอกว่าเหตุใดจึงสำคัญและฉันจะบรรลุพฤติกรรมหลายรูปแบบใน OOP ได้อย่างไร (แน่นอนใน JavaScript) ฉันไม่สามารถให้ตัวอย่างโค้ดใด ๆ ได้เนื่องจากฉันไม่มีแนวคิดในการใช้งานดังนั้นคำถามของฉันอยู่ด้านล่าง มันคืออะไร? ทำไมเราถึงต้องการ? มันทำงานอย่างไร? ฉันจะบรรลุพฤติกรรมหลายรูปแบบนี้ในจาวาสคริปต์ได้อย่างไร ฉันมีตัวอย่างนี้ แต่เข้าใจได้ง่ายว่าผลของรหัสนี้จะเป็นอย่างไร ไม่ได้ให้ความคิดที่ชัดเจนเกี่ยวกับความหลากหลายของตัวเอง function Person(age, weight) { this.age = age; this.weight = weight; this.getInfo = function() { return "I am " + this.age + " years old " + "and weighs " + this.weight +" kilo."; …

7
รูปแบบการออกแบบ Dependency Injection & Singleton
เราจะระบุได้อย่างไรว่าเมื่อใดควรใช้รูปแบบการฉีดพึ่งพาหรือรูปแบบซิงเกิลตัน ฉันได้อ่านในเว็บไซต์จำนวนมากที่พวกเขาพูดว่า "ใช้การฉีดขึ้นข้อมูลบนรูปแบบซิงเกิลตัน" แต่ฉันไม่แน่ใจว่าฉันเห็นด้วยกับพวกเขาทั้งหมดหรือไม่ สำหรับโครงการขนาดเล็กหรือขนาดกลางของฉันฉันเห็นการใช้รูปแบบซิงเกิลตันอย่างตรงไปตรงมา ตัวอย่างเช่น Logger ฉันสามารถใช้Logger.GetInstance().Log(...) แต่แทนที่จะเป็นแบบนี้ทำไมฉันต้องฉีดทุกคลาสที่ฉันสร้างด้วยอินสแตนซ์ของคนตัดไม้?

7
ตัวชี้ฟังก์ชันไปยังฟังก์ชันสมาชิก
ฉันต้องการตั้งค่าตัวชี้ฟังก์ชันเป็นสมาชิกของคลาสที่เป็นตัวชี้ไปยังฟังก์ชันอื่นในคลาสเดียวกัน เหตุผลที่ฉันทำมันซับซ้อน ในตัวอย่างนี้ฉันต้องการให้เอาต์พุตเป็น "1" class A { public: int f(); int (*x)(); } int A::f() { return 1; } int main() { A a; a.x = a.f; printf("%d\n",a.x()) } แต่สิ่งนี้ล้มเหลวในการรวบรวม ทำไม?

5
ถ้า Singletons ไม่ดีเหตุใด Service Container จึงดี?
เราทุกคนรู้วิธีSingletons ไม่ดีเพราะพวกเขาซ่อนอ้างอิงและเหตุผลอื่น ๆ แต่ในเฟรมเวิร์กอาจมีอ็อบเจ็กต์จำนวนมากที่ต้องสร้างอินสแตนซ์เพียงครั้งเดียวและถูกเรียกใช้จากทุกที่ (คนตัดไม้, ฐานข้อมูล ฯลฯ ) เพื่อแก้ปัญหานี้ฉันได้รับคำสั่งให้ใช้สิ่งที่เรียกว่า "Objects Manager" (หรือService Containerเช่น symfony) ที่เก็บข้อมูลอ้างอิงถึง Services (คนตัดไม้ ฯลฯ ) ไว้ภายใน แต่ทำไมผู้ให้บริการถึงไม่เลวร้ายเท่ากับ Singleton ที่บริสุทธิ์? ผู้ให้บริการซ่อนการอ้างอิงด้วยและพวกเขาเพิ่งสรุปการสร้าง istance แรก ดังนั้นฉันจึงลำบากมากที่จะเข้าใจว่าทำไมเราควรใช้ผู้ให้บริการแทนที่จะใช้เสื้อกล้าม ปล. ฉันรู้ว่าการไม่ซ่อนการอ้างอิงฉันควรใช้ DI (ตามที่ระบุไว้โดย Misko) เพิ่ม ฉันจะเพิ่ม: ทุกวันนี้เสื้อกล้ามไม่ได้ชั่วร้ายผู้สร้าง PHPUnit อธิบายไว้ที่นี่: http://sebastian-bergmann.de/archives/882-Testing-Code-That-Uses-Singletons.html DI + Singleton แก้ปัญหา: <?php class Client { public function doSomething(Singleton $singleton …

9
เข้าถึงฟิลด์ส่วนตัวของวัตถุอื่นในคลาสเดียวกัน
class Person { private BankAccount account; Person(BankAccount account) { this.account = account; } public Person someMethod(Person person) { //Why accessing private field is possible? BankAccount a = person.account; } } โปรดลืมเกี่ยวกับการออกแบบ ฉันรู้ว่า OOP ระบุว่าไพรเวทอ็อบเจ็กต์เป็นส่วนตัวสำหรับคลาส คำถามของฉันคือทำไม OOP การออกแบบดังกล่าวว่าเขตข้อมูลส่วนตัวที่มีสิทธิ์เข้าถึงระดับระดับสูงและไม่เข้าถึงวัตถุระดับ ?
91 java  c++  .net  oop 

12
การรวมเทียบกับองค์ประกอบ [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันมีช่วงเวลาที่ยากลำบากในการทำความเข้าใจความแตกต่างระหว่างองค์ประกอบและการรวมใน UML ใครช่วยเสนอข้อเปรียบเทียบและความแตกต่างที่ดีให้ฉันได้ไหม ฉันชอบที่จะเรียนรู้ที่จะตระหนักถึงความแตกต่างระหว่างสิ่งเหล่านี้ในรหัสและ / หรือเพื่อดูตัวอย่างซอฟต์แวร์ / โค้ดสั้น ๆ แก้ไข: สาเหตุส่วนหนึ่งที่ฉันถามเป็นเพราะกิจกรรมการจัดทำเอกสารย้อนกลับที่เรากำลังทำในที่ทำงาน เราเขียนโค้ดแล้ว แต่เราต้องกลับไปสร้างคลาสไดอะแกรมสำหรับโค้ด เราต้องการจับการเชื่อมโยงอย่างเหมาะสม
91 java  oop  uml 

2
จะดำเนินการและขยายเวลาเมื่อใด [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการ1 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เมื่อควรimplementหรือextendจะใช้งานอย่างไร มีตัวอย่างอะไรบ้างในโลกแห่งความเป็นจริง ถูกต้องหรือไม่ การใช้งานดูเหมือนจะเป็นวิธีบังคับใช้ว่าเมธอดบางอย่างมีอยู่ในคลาสและการเรียกฟังก์ชันเมธอดเหล่านี้ได้รับการจัดรูปแบบอย่างถูกต้อง การนำไปใช้ไม่ใช่วิธีการส่งผ่านตัวแปรหรือ "การตั้งค่า" ไปยังชั้นเรียน? สถานการณ์ในชีวิตจริงที่คาดไว้:ฉันมีแพลตฟอร์มอีคอมเมิร์ซที่มีคลาสการชำระเงินหลายแบบซึ่งทั้งหมดเป็นไปตามรูปแบบเดียวกัน เมื่อควรเพิ่มคลาสการชำระเงินใหม่มันง่ายมากที่จะทำตามการออกแบบที่กำหนดไว้interfaceเพื่อให้แน่ใจว่าบิตและชิ้นส่วนทั้งหมดอยู่ที่นั่นตั้งแต่เริ่มต้น การขยายคลาสทำให้คลาสที่ขยาย (ลูก?) สืบทอดทุกอย่างจากคลาสแม่ยกเว้นวิธีการและตัวแปรที่ประกาศเป็นprivate? สถานการณ์ในชีวิตจริงที่คาดว่าจะฉันได้ระดับหนึ่งเรียกว่าsessionsมีสองชั้นเรียนของเด็กชื่อและsessioncookies และdatabasesessionssessioncookiesdatabasesessionsร่วมกันสืบทอดตัวเลือกการกำหนดค่าร่วมกันจำนวนมากจากเซสชันหลักของพวกเขาทำให้ง่ายต่อการเปลี่ยนตัวเลือกการกำหนดค่าเพื่อส่งผลต่อการจัดเก็บข้อมูลผู้เยี่ยมชมในที่สุดทุกประเภท
91 php  oop  extend 

10
ข้อดีของการใช้วิธีการคงที่ใน Python คืออะไร?
ฉันพบข้อผิดพลาดวิธี unbound ใน python พร้อมรหัส import random class Sample(object): '''This class defines various methods related to the sample''' def drawSample(samplesize,List): sample=random.sample(List,samplesize) return sample Choices=range(100) print Sample.drawSample(5,Choices) หลังจากอ่านโพสต์ที่เป็นประโยชน์มากมายที่นี่ฉันคิดว่าจะเพิ่ม@staticmethodด้านบนเพื่อให้โค้ดทำงานได้อย่างไร ฉันเป็นมือใหม่หัดหลาม ใครช่วยอธิบายได้ไหมว่าทำไมเราถึงต้องการกำหนดวิธีการแบบคงที่ หรือเหตุใดวิธีการทั้งหมดจึงไม่ถูกกำหนดให้เป็นวิธีการแบบคงที่

6
ฉันจะประกาศค่าเริ่มต้นสำหรับตัวแปรอินสแตนซ์ใน Python ได้อย่างไร
ฉันควรให้ค่าเริ่มต้นแก่สมาชิกชั้นเรียนเช่นนี้: class Foo: num = 1 หรือแบบนี้? class Foo: def __init__(self): self.num = 1 ในคำถามนี้ฉันพบว่าในทั้งสองกรณี bar = Foo() bar.num += 1 เป็นการดำเนินการที่กำหนดไว้อย่างชัดเจน ฉันเข้าใจว่าวิธีแรกจะให้ตัวแปรคลาสในขณะที่วิธีที่สองจะไม่ อย่างไรก็ตามหากฉันไม่ต้องการตัวแปรคลาส แต่เพียงแค่ตั้งค่าเริ่มต้นสำหรับตัวแปรอินสแตนซ์ของฉันทั้งสองวิธีจะดีเท่ากันหรือไม่ หรือหนึ่งในนั้น 'pythonic' มากกว่าอีกตัว? สิ่งหนึ่งที่ฉันสังเกตเห็นคือในบทแนะนำ Django พวกเขาใช้วิธีที่สองในการประกาศโมเดล โดยส่วนตัวแล้วฉันคิดว่าวิธีที่สองนั้นดีกว่า แต่ฉันอยากรู้ว่าวิธี 'มาตรฐาน' คืออะไร
90 python  class  oop 

9
typescript: จะขยายสองชั้นได้อย่างไร?
ฉันต้องการประหยัดเวลาและใช้โค้ดทั่วไปซ้ำในชั้นเรียนซึ่งขยายคลาส PIXI (ไลบรารีตัวแสดงผล webGl 2d) การเชื่อมต่อวัตถุ: module Game.Core { export interface IObject {} export interface IManagedObject extends IObject{ getKeyInManager(key: string): string; setKeyInManager(key: string): IObject; } } ปัญหาของฉันคือรหัสภายในgetKeyInManagerและsetKeyInManagerจะไม่เปลี่ยนแปลงและฉันต้องการใช้ซ้ำไม่ให้ซ้ำกันนี่คือการนำไปใช้: export class ObjectThatShouldAlsoBeExtended{ private _keyInManager: string; public getKeyInManager(key: string): string{ return this._keyInManager; } public setKeyInManager(key: string): DisplayObject{ this._keyInManager = key; return this; } …

4
คุณจะปิดชั้นเรียนเมื่อใดและทำไม
ใน C # และ C ++ / CLI คีย์เวิร์ดsealed(หรือNotInheritableใน VB) ถูกใช้เพื่อป้องกันคลาสจากโอกาสในการสืบทอด (คลาสจะไม่สามารถสืบทอดได้) ฉันรู้ว่าคุณลักษณะหนึ่งของการเขียนโปรแกรมเชิงวัตถุคือการสืบทอดและฉันรู้สึกว่าการใช้งานsealedขัดกับคุณลักษณะนี้จะหยุดการสืบทอด มีตัวอย่างที่แสดงให้เห็นถึงประโยชน์ของการใช้sealedและเวลาที่สำคัญหรือไม่?
89 c#  .net  oop  c++-cli 

6
downcast และ upcast
ฉันยังใหม่กับC # (และOOP ) เมื่อฉันมีรหัสดังต่อไปนี้: class Employee { // some code } class Manager : Employee { //some code } คำถามที่ 1 : หากฉันมีรหัสอื่นที่ทำสิ่งนี้: Manager mgr = new Manager(); Employee emp = (Employee)mgr; นี่EmployeeคือManagerแต่เมื่อฉันโยนมันแบบEmployeeนั้นหมายความว่าฉันกำลังอัปเดตหรือไม่? คำถาม 2 : เมื่อฉันมีEmployeeคลาสออบเจ็กต์หลายชิ้นและมีบางคลาส แต่ไม่ใช่ทั้งหมดManagerฉันจะดาวน์แคสต์ได้อย่างไร?
89 c#  oop  downcast  upcasting 

7
การเรียงลำดับวัตถุตามค่าคุณสมบัติ
วิธีใช้สถานการณ์ต่อไปนี้โดยใช้ Javascript เท่านั้น: สร้างวัตถุรถยนต์ที่มีคุณสมบัติ (ความเร็วสูงสุดยี่ห้อ ฯลฯ ) จัดเรียงรายการรถที่เรียงตามคุณสมบัติเหล่านั้น

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