คำถามติดแท็ก object-oriented

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

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

1
การห่อรหัสบุคคลที่สามเป็นทางออกเดียวในการทดสอบผู้บริโภคหรือไม่
ฉันทำการทดสอบหน่วยและในชั้นเรียนของฉันฉันต้องส่งจดหมายจากวิธีใดวิธีหนึ่งดังนั้นการใช้การฉีดคอนสตรัคเตอร์ฉันฉีดอินสแตนซ์ของZend_Mailคลาสที่อยู่ในกรอบ Zend ตอนนี้บางคนยืนยันว่าถ้าห้องสมุดมีความมั่นคงเพียงพอและจะไม่เปลี่ยนแปลงบ่อยครั้งก็ไม่จำเป็นต้องห่อมัน ดังนั้นสมมติว่าZend_Mailมันเสถียรและจะไม่เปลี่ยนแปลงและมันก็เหมาะกับความต้องการของฉันทั้งหมดแล้วฉันจะไม่ต้องการเสื้อคลุม ตอนนี้มาดูคลาสของฉันLoggerที่ขึ้นอยู่กับZend_Mail: class Logger{ private $mailer; function __construct(Zend_Mail $mail){ $this->mail=$mail; } function toBeTestedFunction(){ //Some code $this->mail->setTo('some value'); $this->mail->setSubject('some value'); $this->mail->setBody('some value'); $this->mail->send(); //Some } } อย่างไรก็ตามการทดสอบหน่วยต้องการให้ฉันทดสอบองค์ประกอบหนึ่งครั้งดังนั้นฉันต้องจำลองZend_Mailชั้นเรียน นอกจากนี้ฉันกำลังละเมิดหลักการการพึ่งพาการพึ่งพาเนื่องจากLoggerชั้นเรียนของฉันตอนนี้ขึ้นอยู่กับการตัดสินใจที่ไม่เป็นนามธรรม ตอนนี้ฉันจะทดสอบLoggerการแยกโดยไม่ต้องห่อได้Zend_Mailอย่างไร! รหัสอยู่ใน PHP แต่คำตอบไม่จำเป็นต้องเป็น นี่เป็นปัญหาการออกแบบมากกว่าฟีเจอร์เฉพาะภาษา

5
คำจำกัดความที่เป็นทางการสำหรับคำว่า "ภาษา OO บริสุทธิ์"?
ฉันไม่สามารถนึกถึงสถานที่ที่ดีขึ้นในหมู่พี่น้อง SO เพื่อตั้งคำถามเช่นนี้ เดิมทีฉันอยากถามว่า "python เป็นภาษา OO บริสุทธิ์หรือไม่" แต่เมื่อพิจารณาถึงปัญหาและประสบการณ์ที่ไม่สะดวกสบายของผู้คนในขณะที่พยายามกำหนดคำศัพท์ฉันตัดสินใจเริ่มต้นด้วยการได้คำจำกัดความที่ชัดเจนสำหรับคำนั้น ๆ มันค่อนข้างยุติธรรมที่จะเริ่มต้นด้วยการโต้ตอบโดยดร. อลันเคย์ซึ่งเป็นคนบัญญัติศัพท์ (สังเกตแรงบันดาลใจในการเปรียบเทียบทางชีววิทยากับเซลล์หรือสิ่งมีชีวิตอื่น ๆ ) มีวิธีการดังต่อไปนี้ในการเข้าถึงภารกิจ: ให้การวิเคราะห์เชิงเปรียบเทียบโดยการแสดงรายการภาษาการเขียนโปรแกรมที่สามารถแสดง (หรือไม่สามารถทำได้) คุณสมบัติบางอย่างที่ไม่ซ้ำกันและเพียงพอที่จะกำหนดคำศัพท์ (แม้ว่า Smalltalk, Scala, Javaและอื่น ๆ ) เป็นตัวอย่างที่เป็นไปได้ แต่ IMO ไม่เกิดผล ) ให้คำจำกัดความอย่างเป็นทางการ (หรือใกล้เคียงกับมันเช่นในเชิงวิชาการหรือเชิงคณิตศาสตร์มากขึ้น) ให้คำนิยามเชิงปรัชญาที่ต้องพึ่งพาบริบทเชิงความหมายของภาษาที่เป็นรูปธรรมหรือประสบการณ์การเขียนโปรแกรมเบื้องต้น (ต้องมีโอกาสในการอธิบายที่ประสบความสำเร็จโดยชุมชน) รุ่นปัจจุบันของฉัน: "ถ้าเขียนโปรแกรมบางอย่าง ( อย่างเป็นทางการ ) ภาษาที่สามารถ ( หลักไวยากรณ์ ) ความแตกต่างระหว่างการดำเนินงานและถูกดำเนินการเช่นเดียวกับการสรุปเกี่ยวกับประเภทของแต่ละตัวถูกดำเนินการไม่ว่าจะเป็นประเภทนี้เป็นวัตถุ (ในความรู้สึกของ OOP) หรือไม่นั้นเราเรียกว่า ภาษาดังกล่าวเป็นภาษา OO ตราบใดที่มีอย่างน้อยหนึ่งประเภทในภาษานี้ซึ่งเป็นวัตถุในที่สุดหากทุกประเภทของภาษาเป็นวัตถุที่เรากำหนดให้ภาษาดังกล่าวจะบริสุทธิ์ …

5
ฟังก์ชั่นการอ่านโปรแกรมการทำงาน [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ฉันอยากรู้เกี่ยวกับเรื่องนี้เพราะฉันจำก่อนที่จะเรียนรู้ภาษาที่ใช้งานได้ใด ๆ ฉันคิดว่าพวกเขาทั้งหมดอย่างน่ากลัว, สุดยอดและไม่สามารถอ่านได้ชะมัด ตอนนี้ฉันรู้ Haskell และ f # ฉันพบว่าใช้เวลานานกว่าในการอ่านรหัสน้อยลง แต่รหัสน้อยนั้นทำเกินกว่าจำนวนที่เท่ากันจะเป็นภาษาที่จำเป็นดังนั้นจึงรู้สึกว่าได้รับสุทธิและฉันก็ไม่ได้เป็นอย่างยิ่ง มีประสบการณ์ในการทำงาน นี่คือคำถามของฉันฉันมักจะได้ยินจากคน OOP ที่สไตล์การทำงานไม่สามารถอ่านได้มาก ฉันอยากรู้ว่าเป็นกรณีนี้หรือไม่และฉันหลอกตัวเองหรือถ้าพวกเขาใช้เวลาในการเรียนรู้ภาษาที่ใช้งานได้ทั้งสไตล์จะไม่สามารถอ่านได้มากกว่า OOP อีกต่อไป? มีใครเคยเห็นหลักฐานหรือมีเกร็ดเล็กเกร็ดน้อยใด ๆ ที่พวกเขาเห็นสิ่งนี้ไม่ทางใดก็ทางหนึ่งโดยมีความถี่เพียงพอที่จะพูดได้หรือไม่? ถ้าการเขียนฟังก์ชั่นมีความสามารถในการอ่านต่ำกว่าจริง ๆ แล้วฉันไม่ต้องการใช้มันต่อไป แต่ฉันไม่รู้ว่ามันเป็นจริงหรือไม่ ..

5
ประโยชน์ของ OOP แบบคลาสสิกในภาษา Go-like
ฉันคิดถึงการออกแบบภาษาเป็นอย่างมากและองค์ประกอบใดบ้างที่จำเป็นสำหรับภาษาการเขียนโปรแกรม "อุดมคติ" และการศึกษา Go's ของ Google ทำให้ฉันตั้งคำถามกับความรู้ทั่วไปหลายอย่าง ดูเหมือนว่า Go จะได้รับประโยชน์ที่น่าสนใจทั้งหมดจากการเขียนโปรแกรมเชิงวัตถุโดยไม่มีโครงสร้างของภาษาเชิงวัตถุ ไม่มีคลาส, โครงสร้างเท่านั้น; ไม่มีการสืบทอดคลาส / โครงสร้าง - การฝังโครงสร้างเท่านั้น ไม่มีลำดับชั้นไม่มีคลาสพาเรนต์ไม่มีการปรับใช้อินเตอร์เฟสที่ชัดเจน กฎการคัดเลือกนักแสดงประเภทนั้นขึ้นอยู่กับระบบที่หลวมคล้ายกับการพิมพ์เป็ดเช่นหาก struct ดำเนินองค์ประกอบที่จำเป็นของ "Reader" หรือ "Request" หรือ "Encoding" คุณจะสามารถใช้และใช้มันได้ หนึ่งเดียว. มีบางอย่างเกี่ยวกับ OOP ที่ถูกนำมาใช้ใน C ++ และ Java และ C # ที่มีความสามารถมากขึ้นโดยทั่วไปมีความสามารถในการบำรุงรักษามากขึ้นและมีประสิทธิภาพมากกว่าที่คุณต้องยอมแพ้เมื่อย้ายไปใช้ภาษาอย่าง Go? คุณมีประโยชน์อะไรที่ต้องยอมแพ้เพื่อให้ได้ความเรียบง่ายที่กระบวนทัศน์ใหม่นี้แสดงให้เห็น? EDIT ลบคำถาม "ล้าสมัย" ที่ผู้อ่านดูเหมือนจะถูกวางสายเกินไปและทำให้โกรธโดย คำถามคืออะไรกระบวนทัศน์เชิงวัตถุแบบดั้งเดิม (ที่มีลำดับชั้นและเช่นนั้น) ที่เห็นบ่อยในการใช้ภาษาทั่วไปต้องเสนอที่ไม่สามารถทำได้อย่างง่ายดายในแบบจำลองที่ง่ายกว่านี้? หรืออีกนัยหนึ่งถ้าคุณต้องออกแบบภาษาวันนี้มีเหตุผลที่คุณต้องการรวมแนวคิดของลำดับชั้นของชั้นเรียนหรือไม่?

5
การทดสอบหน่วยรหัสขั้นตอนมีประสิทธิภาพ?
ในโครงการปัจจุบันอำนาจที่ต้องการให้มีการทดสอบหน่วยรวมอยู่ในวงจรการพัฒนาของเราเพื่อหลีกเลี่ยงข้อผิดพลาดจำนวนคงที่ที่ดูเหมือนจะซึมเข้าไปในรหัสของเรา ปัญหาคือรหัสสปาเก็ตตี้นั้นเป็นขั้นตอน 95% ซึ่งฉันไม่เคยทำการทดสอบหน่วยด้วย (ประสบการณ์ทั้งหมดของฉันกับการทดสอบหน่วยได้รับด้วยรหัส OOP) ดังนั้นคำถามของฉันสั้น ๆ ก็ควรที่จะดำเนินการทดสอบหน่วยกับ codebase ปัจจุบันของเราหรือแนะนำให้เลื่อนออกไปจนกว่าแอปพลิเคชันจะถูกย้ายไปยังกรอบงาน OOP ที่เหมาะสมหรือไม่ PS: ในขณะที่ฉันพยายามจัดรูปแบบคำถามนี้เป็นผู้ไม่เชื่อเรื่องภาษาฉันรู้สึกว่าการระบุแอปพลิเคชันที่เป็นปัญหานั้นใช้ PHP และ javascript จะช่วยให้คำตอบที่เฉพาะเจาะจงมากขึ้นซึ่งสามารถตอบคำถามนี้ได้

7
อะไรคือบทบาทของซิงเกิลตันคลาสนามธรรมและอินเตอร์เฟส
ฉันกำลังศึกษา OOP ใน C ++ และแม้ว่าฉันตระหนักถึงคำจำกัดความของแนวคิดทั้งสามนี้ฉันก็ไม่สามารถรู้ได้เลยว่าจะใช้เมื่อไหร่หรืออย่างไร ลองใช้คลาสนี้เป็นตัวอย่าง: class Person{ private: string name; int age; public: Person(string p1, int p2){this->name=p1; this->age=p2;} ~Person(){} void set_name (string parameter){this->name=parameter;} void set_age (int parameter){this->age=parameter;} string get_name (){return this->name;} int get_age (){return this->age;} }; 1. ซิงเกิล วิธีไม่ข้อ จำกัด ของการเรียนที่จะมีเพียงหนึ่งในการทำงานของวัตถุ? คุณสามารถออกแบบคลาสที่มีเพียง 2 อินสแตนซ์ได้หรือไม่ หรืออาจจะ 3? เมื่อใดที่แนะนำ / …

2
คำอธิบายของฉันเกี่ยวกับนางแบบนักแสดงถูกต้องหรือไม่?
ถ้าฉันเข้าใจโมเดลนักแสดงก็เหมือนโมเดลวัตถุ แต่มีความแตกต่างเล็กน้อย: วัตถุทุกตัวมีเธรดแยกต่างหากและไม่มีปัญหาแม้ว่าคุณจะมีวัตถุนับพัน นักแสดงไม่ได้มีปฏิสัมพันธ์โดยการเรียกฟังก์ชั่นและรับค่าตอบแทน แต่เป็นการส่งและรับข้อความแทน หากคุณไม่ละเมิดรูปแบบดังกล่าวแอปของคุณจะใช้การทำงานพร้อมกันให้เต็มกำลังโดยไม่มีความเสี่ยงจากสภาพการแข่งขัน ทุกสิ่งที่คุณสามารถทำได้ใน OO คุณสามารถใช้นักแสดง แต่ดีกว่าปัญหาที่ว่าทุกอย่างที่เราเขียนในปีที่ผ่านมาเป็น OO แต่การเปลี่ยนแปลงนั้นใกล้เข้ามาแล้ว ตัวอย่างเช่นสมมติว่าฉันต้องกำหนดคลาสเวกเตอร์ 3d / นักแสดงสร้างอินสแตนซ์ที่สองและเรียกใช้การดำเนินการรวมกับพวกเขา วัตถุที่มุ่งเน้น: class V3d { constructor V3d(x,y,z) //bla float x,y,z; function sum(V3d b) { return V3d(x+b.x,y+b.y,z+b.z); } } //using: mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly drawPoint(mySum) //uses the result รุ่นนักแสดง: actor V3d …

3
การประยุกต์ใช้หลักการ SOLID
ฉันค่อนข้างใหม่กับหลักการออกแบบSOLID ฉันเข้าใจถึงสาเหตุและผลประโยชน์ของพวกเขา แต่ยังไม่สามารถนำไปใช้กับโครงการขนาดเล็กที่ฉันต้องการสร้างโครงสร้างใหม่ให้เป็นการฝึกปฏิบัติเพื่อใช้หลักการ SOLID ฉันรู้ว่าไม่จำเป็นต้องเปลี่ยนแอปพลิเคชันที่ทำงานได้อย่างสมบูรณ์แบบ แต่ฉันต้องการปรับโครงสร้างใหม่เพื่อให้ได้รับประสบการณ์การออกแบบสำหรับโครงการในอนาคต แอปพลิเคชั่นมีงานดังต่อไปนี้ (จริง ๆ แล้วมากกว่านั้น แต่ให้ง่าย): มันต้องอ่านไฟล์ XML ซึ่งมีฐานข้อมูลตาราง / คอลัมน์ / ดูคำนิยาม ฯลฯ และสร้างไฟล์ SQL ที่สามารถใช้เพื่อสร้าง สกีมาฐานข้อมูล ORACLE (หมายเหตุ: โปรดอย่าอภิปรายว่าทำไมฉันถึงต้องการหรือทำไมฉันถึงไม่ใช้ XSLT และอื่น ๆ มีเหตุผลหลายประการ แต่มันไม่ใช่หัวข้อ) เป็นการเริ่มต้นฉันเลือกดูเฉพาะตารางและข้อ จำกัด หากคุณไม่สนใจคอลัมน์คุณสามารถระบุวิธีต่อไปนี้: ข้อ จำกัด เป็นส่วนหนึ่งของตาราง (หรือมากกว่าอย่างแม่นยำส่วนหนึ่งของคำสั่ง CREATE TABLE) และข้อ จำกัด อาจอ้างอิงตารางอื่น ก่อนอื่นฉันจะอธิบายว่าแอปพลิเคชันมีลักษณะอย่างไรในตอนนี้ (ไม่ได้ใช้ SOLID): ในขณะนี้แอปพลิเคชันมีคลาส "ตาราง" ซึ่งมีรายการตัวชี้ถึงข้อ จำกัด …

5
โปรแกรมเชิงวัตถุสามารถมองเห็นเป็นเครื่องสถานะ จำกัด ได้หรือไม่?
นี่อาจเป็นคำถามเชิงปรัชญา / พื้นฐาน แต่ฉันแค่ต้องการชี้แจง ในความเข้าใจของฉัน Finite State Machine เป็นวิธีการสร้างแบบจำลองระบบซึ่งผลลัพธ์ของระบบจะไม่เพียงขึ้นอยู่กับอินพุตปัจจุบัน แต่ยังรวมถึงสถานะปัจจุบันของระบบด้วย นอกจากนี้ตามชื่อที่แสดงให้เห็นมันเครื่องสถานะ จำกัด สามารถแบ่งออกเป็นจำนวน จำกัด ของรัฐที่มีสถานะและพฤติกรรมของตน ถ้าสิ่งนี้ถูกต้องวัตถุทุกชิ้นที่มีข้อมูลและฟังก์ชั่นควรเป็นสถานะในแบบจำลองเชิงวัตถุของเราหรือไม่ทำให้การออกแบบเชิงวัตถุใด ๆ เป็นเครื่องสถานะ จำกัด ? ถ้านั่นไม่ใช่การตีความของ FSM ในการออกแบบวัตถุสิ่งที่ผู้คนหมายถึงอย่างแน่นอนเมื่อพวกเขาใช้ FSM ในซอฟต์แวร์? ฉันพลาดอะไรไปรึเปล่า? ขอบคุณ

7
รับหัวของฉันรอบ Immutability
ฉันยังใหม่ต่อการเขียนโปรแกรมเชิงวัตถุและแนวคิดหนึ่งที่ทำให้ฉันเข้าใจไม่ได้ ฉันคิดว่าหลอดไฟดับไปเมื่อคืน แต่ฉันต้องการยืนยัน: เมื่อฉันเจอข้อความที่ไม่สามารถเปลี่ยนวัตถุที่ไม่เปลี่ยนรูปได้ฉันก็สับสนเพราะฉันสามารถทำสิ่งต่อไปนี้: NSString *myName = @"Bob"; myName = @"Mike"; ที่นั่นฉันเพิ่งเปลี่ยน myName ประเภท NSString ที่ไม่เปลี่ยนรูป ปัญหาของฉันคือคำว่า "วัตถุ" สามารถอ้างถึงวัตถุทางกายภาพในหน่วยความจำหรือนามธรรม "myName" คำจำกัดความเดิมใช้กับแนวคิดของการเปลี่ยนแปลงไม่ได้ สำหรับตัวแปรนั้นนิยามของ immutability ที่ชัดเจน (สำหรับฉัน) คือค่าของวัตถุที่ไม่เปลี่ยนรูปสามารถเปลี่ยนได้โดยเปลี่ยนตำแหน่งในหน่วยความจำเช่นการอ้างอิง ถูกต้องหรือไม่ฉันยังหลงทางอยู่ในป่า?

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

8
PHP มีการวางวัตถุอย่างไร [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ฉันมีโอกาสได้พูดคุยกับเพื่อนร่วมงานที่น่าสนใจ ส่วนใหญ่เป็นสคริปต์การกระทำแฟลชหรือนักพัฒนา Java เราได้พูดคุยเกี่ยวกับวิธีที่ php จัดการกับ OOP ฉันบอกว่า PHP สามารถจัดการ OOP ได้เกือบทุกอย่างตั้งแต่ PHP 5.2 หรือ 5.3 ฉันผิดหรือเปล่า? ฉันไม่ได้รับคำตอบว่าใช่ / ไม่ใช่ แต่ฉันต้องการรับฟังความคิดเห็นเพิ่มเติมจากนักพัฒนา

4
FP และ OO orthogonal?
ฉันเคยได้ยินครั้งนี้และอีกครั้งและฉันพยายามที่จะเข้าใจและตรวจสอบความคิดที่ว่า FP และ OO เป็นมุมฉาก ประการแรกมันหมายความว่าอย่างไรสำหรับ 2 แนวคิดที่จะเป็นมุมฉาก FP ส่งเสริมการไม่เปลี่ยนรูปและความบริสุทธิ์ให้มากที่สุด และ OO ดูเหมือนสิ่งที่สร้างขึ้นสำหรับรัฐและการกลายพันธุ์ และฉันรู้ว่าวัตถุนั้นไม่สามารถเปลี่ยนแปลงได้ แต่ OO ดูเหมือนจะบอกเป็นนัยถึงการเปลี่ยนแปลงของฉัน พวกเขาดูเหมือนตรงกันข้าม นั่นหมายความว่าพวกเขาเป็นมุมฉาก? ภาษาอย่างสกาล่าทำให้ง่ายต่อการทำ OO และ FP ทั้งสองสิ่งนี้ส่งผลกระทบต่อความตั้งฉากของทั้งสองวิธีหรือไม่?

6
ปัญหาวงกลมวงรีสามารถแก้ไขได้โดยการย้อนกลับความสัมพันธ์หรือไม่?
การCircleยืดเวลาEllipseแบ่งหลักการ Liskov Substitionเนื่องจากมันจะแก้ไข postcondition: คุณสามารถตั้งค่า X และ Y อย่างอิสระเพื่อวาดวงรี แต่ X ต้องเท่ากับ Y เสมอสำหรับวงกลม แต่นี่ไม่ใช่ปัญหาที่เกิดจากการมี Circle เป็นชนิดย่อยของ Ellipse หรือไม่? เราไม่สามารถย้อนกลับความสัมพันธ์หรือไม่ ดังนั้นวงกลม supertype - setRadiusมันมีวิธีเดียว จากนั้นขยายวงรีวงกลมโดยการเพิ่มและsetX setYการเรียกsetRadiusใช้ Ellipse จะเป็นการตั้งค่าทั้ง X และ Y หมายถึง postcondition บน setRadius ได้รับการดูแล แต่ตอนนี้คุณสามารถตั้งค่า X และ Y ได้อย่างอิสระผ่านอินเทอร์เฟซเสริม

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