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

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

3
การออกแบบเชิงวัตถุสำหรับเกมหมากรุก [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันพยายามทำความเข้าใจเกี่ยวกับวิธีการออกแบบและคิดในลักษณะเชิงวัตถุและต้องการรับคำติชมจากชุมชนในหัวข้อนี้ ต่อไปนี้เป็นตัวอย่างเกมหมากรุกที่ฉันต้องการออกแบบในลักษณะ OO นี่เป็นการออกแบบที่กว้างมากและจุดสนใจของฉันในขั้นตอนนี้คือการระบุว่าใครเป็นผู้รับผิดชอบต่อข้อความใดและวัตถุโต้ตอบกันอย่างไรเพื่อจำลองเกม โปรดชี้ให้เห็นว่ามีองค์ประกอบของการออกแบบที่ไม่ดี (ข้อต่อสูงการเชื่อมต่อที่ไม่ดี ฯลฯ ) และจะปรับปรุงได้อย่างไร เกมหมากรุกมีคลาสดังต่อไปนี้ คณะกรรมการ ผู้เล่น ชิ้น สแควร์ เกมหมากรุก คณะกรรมการประกอบด้วยสี่เหลี่ยมดังนั้นคณะกรรมการจึงมีหน้าที่รับผิดชอบในการสร้างและจัดการวัตถุทรงสี่เหลี่ยม แต่ละชิ้นยังอยู่ในรูปสี่เหลี่ยมจัตุรัสดังนั้นแต่ละชิ้นจึงมีการอ้างอิงถึงสี่เหลี่ยมจัตุรัสด้วย (สิ่งนี้สมเหตุสมผลหรือไม่?) จากนั้นแต่ละชิ้นจะต้องรับผิดชอบในการเคลื่อนย้ายตัวเองจากตารางหนึ่งไปยังอีกสี่เหลี่ยมหนึ่ง คลาสผู้เล่นมีการอ้างอิงถึงชิ้นส่วนทั้งหมดที่เขาเป็นเจ้าของและยังรับผิดชอบในการสร้างของพวกเขา (ผู้เล่นควรสร้างชิ้นส่วนหรือไม่) ผู้เล่นมีวิธี TakeTurn ซึ่งจะเรียกวิธีการ movePiece ซึ่งเป็นของคลาสชิ้นส่วนซึ่งเปลี่ยนตำแหน่งของชิ้นส่วนจากตำแหน่งปัจจุบันไปยังตำแหน่งอื่น ตอนนี้ผมสับสนว่าคณะกรรมการต้องรับผิดชอบอะไรกันแน่ ฉันคิดว่าจำเป็นต้องกำหนดสถานะปัจจุบันของเกมและรู้ว่าเมื่อเกมจบลง แต่เมื่อชิ้นส่วนเปลี่ยนมัน ' ตำแหน่งของบอร์ดควรปรับปรุงอย่างไร ควรรักษาอาร์เรย์ของสี่เหลี่ยมที่แยกจากกันซึ่งชิ้นส่วนใดมีอยู่และได้รับการอัปเดตเมื่อชิ้นส่วนเคลื่อนที่หรือไม่ นอกจากนี้ ChessGame ยังสร้างบอร์ดและวัตถุของผู้เล่นอย่างตั้งใจซึ่งจะสร้างสี่เหลี่ยมและชิ้นส่วนตามลำดับและเริ่มการจำลอง สั้น ๆ นี่อาจเป็นลักษณะของโค้ดใน ChessGame Player p1 …
88 chess  oop 


7
เมธอดที่โยน RuntimeException ควรระบุในเมธอดซิกเนเจอร์หรือไม่
ตัวอย่างเช่นหลายวิธีในกรอบ / JDK อาจโยน java.lang.SecurityException แต่สิ่งนี้ไม่ได้ระบุไว้ในลายเซ็นของวิธีการ (เนื่องจากปกติแล้วจะสงวนไว้สำหรับข้อยกเว้นที่ตรวจสอบ) ฉันต้องการโต้แย้งว่าการประกาศ RuntimeExceptions ใน method sigs มีประโยชน์มากมาย (คล้ายกับการตรวจสอบประเภทคงที่เป็นต้น) ฉันเมาหรืออย่างอื่น?

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

25
การเรียนรู้ / การปรับใช้รูปแบบการออกแบบ (สำหรับมือใหม่) [ปิด]
ตามที่กล่าวมาในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดขึ้นมาใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน9 ปีที่ผ่านมา ฉันเป็นมือใหม่ที่สับสนและเป็นนักเขียนโปรแกรมมือสมัครเล่นที่พยายามจับประเด็นนี้ดังนั้นโปรดยกโทษให้ฉันหากคำถามของฉันผิดไปเล็กน้อยหรือไม่สมเหตุสมผล ฉันเห็นคำถามมากมายเกี่ยวกับ SO เกี่ยวกับการใช้รูปแบบการออกแบบและฉันสงสัยว่าใครมีแหล่งข้อมูลที่ดีสำหรับการเรียนรู้และใช้รูปแบบการออกแบบหรือไม่? ฉันเข้าใจแนวคิดทั่วไปและรู้วิธี / เวลาที่จะใช้สองอย่าง (Singletons, Factory method) แต่ฉันรู้ว่าฉันพลาด (ในกรณีที่มีความสำคัญภาษาที่ฉันชอบคือ C # แต่ฉันสามารถเรียนรู้จากตัวอย่างในภาษาอื่นได้)

30
ความหลากหลาย - กำหนดเพียงสองประโยค [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน5 ปีที่ผ่านมา ปรับปรุงคำถามนี้ ฉันได้ดูคำจำกัดความและคำอธิบายอื่น ๆ แล้วและไม่มีข้อใดที่ทำให้ฉันพอใจ ฉันต้องการดูว่ามีใครสามารถกำหนดความหลากหลายได้มากที่สุดสองประโยคโดยไม่ต้องใช้รหัสหรือตัวอย่างใด ๆ ฉันไม่อยากได้ยินว่า 'คุณมีคน / รถ / ที่เปิดกระป๋อง ... ' หรือคำนี้ได้มาอย่างไร (ไม่มีใครประทับใจที่คุณรู้ว่า poly และ morph หมายถึงอะไร) หากคุณมีความเข้าใจเป็นอย่างดีว่าพหูสูตคืออะไรและมีความสามารถในการใช้ภาษาอังกฤษได้ดีกว่าที่ควรจะสามารถตอบคำถามนี้ได้โดยใช้คำจำกัดความสั้น ๆ แม้ว่าจะหนาแน่น หากคำจำกัดความของคุณกำหนดความหลากหลายได้อย่างถูกต้อง แต่มีความหนาแน่นมากจนต้องอ่านซ้ำสองสามครั้งนั่นคือสิ่งที่ฉันกำลังมองหา ทำไมแค่สองประโยค? เพราะคำจำกัดความสั้นและฉลาด คำอธิบายยาวและมีตัวอย่างและรหัส ดูคำอธิบายที่นี่ (คำตอบในหน้าเหล่านั้นไม่เป็นที่พอใจสำหรับคำถามของฉัน): Polymorphism vs Overriding vs Overloading พยายามอธิบายความหลากหลายให้ง่ายที่สุดเท่าที่จะทำได้ ทำไมฉันถึงถามคำถามนี้ เนื่องจากฉันถูกถามคำถามเดียวกันและพบว่าฉันไม่สามารถหาคำจำกัดความที่น่าพอใจได้ (ตามมาตรฐานของฉันซึ่งค่อนข้างสูง) ฉันต้องการดูว่ามีจิตใจที่ยอดเยี่ยมในไซต์นี้หรือไม่ หากคุณไม่สามารถกำหนดข้อกำหนดสองประโยคได้จริงๆ (เป็นเรื่องที่ยากที่จะกำหนด) …

7
ใน Javascript ขีดล่างหมายความว่าอย่างไร
var Gallery = Backbone.Controller.extend({ _index: null, _photos: null, _album :null, _subalbums:null, _subphotos:null, _data:null, _photosview:null, _currentsub:null, routes: { "": "index", "subalbum/:id": "subindex", "subalbum/:id/" : "directphoto", "subalbum/:id/:num" : "hashphoto" }, initialize: function(options) { var ws = this; if (this._index === null){ $.ajax({ url: 'data/album1.json', dataType: 'json', data: {}, success: function(data) { ws._data …

5
คลาสซิงเกิลในทับทิมคืออะไร?
คลาสซิงเกิลใน Ruby เป็นคลาสในตัวเองหรือไม่? มันเป็นเหตุผลว่าทำไมวัตถุทั้งหมดเป็นของ "คลาส"? แนวคิดนั้นคลุมเครือแต่ฉันเชื่อว่ามันมีส่วนเกี่ยวข้องกับสาเหตุที่ฉันสามารถกำหนดเมธอดคลาสได้เลย ( class foo; def foo.bar ...) คลาส Singleton ใน Ruby คืออะไร?
85 ruby  oop  singleton 

11
สมาชิกส่วนตัวใน CoffeeScript?
มีใครรู้วิธีสร้างสมาชิกส่วนตัวแบบไม่คงที่ใน CoffeeScript บ้างไหม ตอนนี้ฉันกำลังทำสิ่งนี้ซึ่งเพิ่งใช้ตัวแปรสาธารณะที่ขึ้นต้นด้วยขีดล่างเพื่อชี้แจงว่าไม่ควรใช้นอกคลาส: class Thing extends EventEmitter constructor: (@_name) -> getName: -> @_name การใส่ตัวแปรในคลาสทำให้เป็นสมาชิกแบบคงที่ แต่ฉันจะทำให้ตัวแปรไม่คงที่ได้อย่างไร เป็นไปได้หรือไม่โดยไม่ต้อง "แฟนซี"?

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

10
การเขียนโปรแกรมเชิงวัตถุ - วิธีการหลีกเลี่ยงการทำซ้ำในกระบวนการที่แตกต่างกันเล็กน้อยขึ้นอยู่กับตัวแปร
สิ่งที่เกิดขึ้นค่อนข้างมากในงานปัจจุบันของฉันคือมีกระบวนการทั่วไปที่ต้องเกิดขึ้น แต่แล้วส่วนแปลก ๆ ของกระบวนการนั้นต้องเกิดขึ้นแตกต่างกันเล็กน้อยขึ้นอยู่กับค่าของตัวแปรบางตัวและฉันไม่ ค่อนข้างแน่ใจว่าเป็นวิธีที่ดีที่สุดในการจัดการกับสิ่งนี้ ฉันจะใช้ตัวอย่างที่เรามักจะมีซึ่งกำลังทำสิ่งแตกต่างกันเล็กน้อยขึ้นอยู่กับประเทศที่เรากำลังเผชิญอยู่ ดังนั้นฉันมีชั้นเรียนลองเรียกมันว่าProcessor: public class Processor { public string Process(string country, string text) { text.Capitalise(); text.RemovePunctuation(); text.Replace("é", "e"); var split = text.Split(","); string.Join("|", split); } } ยกเว้นว่าจะมีเพียงการกระทำบางอย่างที่ต้องเกิดขึ้นในบางประเทศ ตัวอย่างเช่นมีเพียง 6 ประเทศเท่านั้นที่ต้องใช้ขั้นตอนการโอนเป็นทุน อักขระที่จะแยกอาจแตกต่างกันไปตามแต่ละประเทศ การเปลี่ยนสำเนียง'e'อาจจำเป็นต้องใช้เท่านั้นขึ้นอยู่กับประเทศ เห็นได้ชัดว่าคุณสามารถแก้ไขได้โดยทำสิ่งนี้: public string Process(string country, string text) { if (country == "USA" || country …
64 c#  oop 

3
วิธีการนำไปใช้ใน Raku
ใน Perl โดยใช้Mooคุณสามารถใช้งานaroundsubs ซึ่งจะล้อมรอบวิธีอื่น ๆ ในชั้นเรียน around INSERT => sub { my $orig = shift; my $self = shift; print "Before the original sub\n"; my $rv = $orig->($self, @_); print "After the original sub\n"; }; พฤติกรรมนี้สามารถนำไปใช้ในRakuโดยเฉพาะอย่างยิ่งการใช้role?
13 oop  raku 

1
ความแตกต่างระหว่างกระบวนการ / ข้อความใน Erlang และวัตถุ / ข้อความใน Smalltalk คืออะไร?
ฉันพยายามที่จะเข้าใจความแตกต่างระหว่างวัตถุ / ข้อความในสมอลล์ทอล์คและกระบวนการ / ข้อความในErlang ผมอ่านโพสต์ต่อไปในหัวข้อ เท่าที่ฉันเข้าใจใน Smalltalk ทุกอย่างเป็นวัตถุและทุกสิ่งมีนามธรรม "วัตถุ / ข้อความ" ที่เป็นนามธรรม - แม้ตัวเลข1จะเป็นวัตถุที่สามารถเข้าถึงได้เมื่อมีการส่งข้อความเท่านั้น คือ1กระบวนการใน Erlang / Elixir หรือไม่? ทุกอย่างใน Erlang เป็นคำตอบของกระบวนทัศน์ข้อความ / โปรแกรมหรือไม่? คุณสามารถส่งข้อความถึงหมายเลขใน Erlang ได้หรือไม่? ขอบคุณมาก.

2
ใน Java เราควรใช้เมธอดอินสแตนซ์ส่วนตัวในอินเตอร์เฟสเมื่อใด
ในฐานะของ Java 9 วิธีการในอินเตอร์เฟสสามารถเป็นส่วนตัวได้ วิธีการส่วนตัวสามารถคงที่หรือวิธีการอินสแตนซ์ เนื่องจากไพรเวตเมธอดสามารถใช้ได้เฉพาะในเมธอดของอินเตอร์เฟสเองเท่านั้นการใช้งานจึง จำกัด เฉพาะวิธีการช่วยเหลือสำหรับเมธอดอื่นของอินเตอร์เฟส Cay S. Horstmann, Core Java Volume I - ความรู้พื้นฐาน ฉันเข้าใจว่าเราสามารถใส่ฟังก์ชั่นทั่วไปในวิธีการส่วนตัวและไม่ให้สาธารณชนเข้าถึงได้ แต่เรามีวิธีส่วนตัวสองแบบที่นี่: private private static การใช้private staticวิธีการนั้นเป็นสิ่งที่เข้าใจได้ แต่เราควรใช้privateวิธีการเมื่อใด เราไม่ได้จัดการกับอินสแตนซ์ที่นี่เนื่องจากเป็นอินเทอร์เฟซดังนั้นทำไมจึงprivateอนุญาตให้สร้างวิธีได้ เราไม่ต้องการprivate staticวิธีการอย่างเดียวเหรอ?
9 java  oop 

1
การใช้ตัวดัดแปลงการเข้าถึงสมาชิกที่ จำกัด น้อยกว่าตัวดัดแปลงการเข้าถึงคลาสคืออะไร?
ว่าฉันมีชั้นเรียนที่มีสมาชิกบางคนและสมาชิกมีตัวดัดแปลงการเข้าถึงที่ จำกัด น้อยกว่าชั้นเรียน ตัวอย่างที่เป็นรูปธรรมอาจเป็น: package apples; class A { // package private public int foo() { // public (=> less restrictive than *package private*) return 42; } } เพื่อความเข้าใจของฉันระดับปรับปรุงการเข้าถึงที่เป็นที่เข้มงวดมากขึ้นกว่าสมาชิกปรับปรุงการเข้าถึงจะแทนที่ข้อ จำกัด น้อยกว่าสมาชิกปรับเปลี่ยนการเข้าถึง ดังนั้นข้อ จำกัด น้อยกว่าสมาชิกปรับปรุงการเข้าถึงควรจะมีผลที่ทุกคน ความเข้าใจของฉันถูกต้องหรือไม่ ถ้าไม่จะเกิดอะไรขึ้น อะไรคือเหตุผลที่ถูกต้องที่จะมีตัวดัดแปลงการเข้าถึงสมาชิกที่ จำกัด น้อยกว่า ในที่สุดมีวิธีปฏิบัติที่ดีที่สุดในการติดตามคืออะไร ฉันยังทำการทดลองบางอย่างเพราะฉันคิดว่ามันอาจมีผลตามมาเมื่อฉันเริ่มส่งการอ้างอิงฟังก์ชั่นไปรอบ ๆ อย่างไรก็ตามถึงกระนั้นตัวดัดแปลงการเข้าถึงก็ดูเหมือนจะไม่สำคัญ สถานการณ์ที่ฉันสร้างขึ้นมีดังนี้: apples.Bมีวิธีการที่ประชาชนที่ส่งกลับอ้างอิงถึงbla()apples.A.foo จากนั้นpizzas.Cเรียกapples.B.blaเพื่อขอรับการอ้างอิงA.fooและเรียกใช้ ดังนั้นA.foo()ไม่สามารถมองเห็นได้โดยตรงCแต่สามารถเข้าถึงได้ทางอ้อมเท่านั้นB.bla() ฉันทดสอบแล้วและมันก็ไม่ได้สร้างความแตกต่างไม่ว่าฉันจะปรับปรุงการเข้าถึงของfoo() แพคเกจส่วนตัวหรือไม่ package …

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