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

แม่แบบสำหรับการประกาศประเภทของวัตถุ

4
“ ใช้แผนที่แทนคลาสเพื่อแสดงข้อมูล” -Rich Hickey
ในวิดีโอนี้โดย Rich Hickeyผู้สร้าง Clojure เขาแนะนำให้ใช้แผนที่เพื่อแสดงข้อมูลแทนการใช้คลาสเพื่อเป็นตัวแทนของมันดังที่ทำใน Java ฉันไม่เข้าใจว่ามันจะดีกว่านี้ได้อย่างไรเนื่องจากผู้ใช้ API จะรู้ได้อย่างไรว่าปุ่มป้อนข้อมูลคืออะไรหากมีการแสดงเป็นแผนที่ ตัวอย่าง : PersonAPI { Person addPerson(Person obj); Map<String, Object> addPerson(Map<String, Object> personMap); } ในฟังก์ชั่นที่สองผู้ใช้ API จะรู้ได้อย่างไรว่าอินพุตใดที่จะสร้างบุคคล
19 java  design  class  clojure  map 

1
เหตุใดจึงต้องใช้คลาสเมื่อตั้งโปรแกรม tkinter gui ใน python
ฉันเขียนโปรแกรมใน python เป็นหลักและตั้งโปรแกรม GUI สองตัวด้วย Tkinter การสอนทุกครั้งที่ฉันเคยเห็นได้แนะนำให้กำหนดและใช้คลาสสำหรับ GUI แต่ GUI ของฉันทำงานได้อย่างไร้ที่ติโดยใช้เพียงโพรซีเดอร์เท่านั้น ทำไมต้องใช้คลาส ดูเหมือนว่าจากมุมมองของฉันเพียงแค่เพิ่มเลเยอร์ความซับซ้อนและโค้ดที่ไม่จำเป็นออกไป
19 python  gui  class 

2
คลาสกับโมดูลใน Python
Python มีโมดูลมากมาย (เช่นre) ที่ทำชุดของการกระทำเฉพาะ คุณสามารถเรียกใช้ฟังก์ชั่นของโมดูลนี้และรับผลลัพธ์และโมดูลโดยรวมมีแนวคิดอยู่เบื้องหลัง (ในกรณีนี้คือการจัดการกับนิพจน์ทั่วไป) คลาสดูเหมือนจะทำสิ่งเดียวกันเกือบทั้งหมด แต่พวกมันดูเหมือนจะใช้คุณสมบัติค่อนข้างมากกว่าโมดูล โมดูลแตกต่างจากคลาสอย่างไร? (ฉันรู้ว่าฉันไม่สามารถคลาสย่อยโมดูลได้ แต่มันคืออะไร) ฉันควรใช้คลาสแทนโมดูลเมื่อใด
19 class  modules 

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

4
วิธีที่ดีที่สุดในการจัดระเบียบไฟล์คลาสและส่วนต่อประสาน
ตกลง .. หลังจากการสนทนาทั้งหมดฉันเปลี่ยนคำถามเล็กน้อยเพื่อให้สะท้อนตัวอย่างที่เป็นรูปธรรมที่ฉันจัดการดีขึ้น ฉันมีสองคลาสModelOneและคลาสModelTwoเหล่านี้มีฟังก์ชันการทำงานที่คล้ายกัน แต่ไม่เกี่ยวข้องกัน แต่ฉันมีชั้นที่สามCommonFuncที่มีบางฟังก์ชันการทำงานของประชาชนที่จะดำเนินการทั้งในModelOneและและได้รับปัจจัยจากการเป็นต่อModelTwo DRYทั้งสองรุ่นมีอินสแตนซ์ภายในModelMainคลาส (ซึ่งเป็นอินสแตนซ์ในระดับที่สูงขึ้น ฯลฯ - แต่ฉันหยุดที่ระดับนี้) ภาชนะ IoC ว่าฉันใช้เป็นไมโครซอฟท์สามัคคี ฉันไม่แกล้งทำเป็นผู้เชี่ยวชาญ แต่ฉันเข้าใจว่าคุณลงทะเบียน tuple ของ interface และ class กับ container และเมื่อคุณต้องการ class คอนกรีตคุณถาม IoC container สำหรับวัตถุใด ๆ ที่ตรงกับ interface เฉพาะ นี่ก็หมายความว่าสำหรับทุกวัตถุที่ฉันต้องการยกตัวอย่างจาก Unity จะต้องมีอินเตอร์เฟสที่ตรงกัน เพราะแต่ละชั้นเรียนของฉันดำเนินการที่แตกต่างกัน (และไม่ทับซ้อนกัน) ฟังก์ชั่นนี้หมายถึงว่ามีอัตราส่วน 1: ระหว่างอินเตอร์เฟซและชั้น 1 1 อย่างไรก็ตามมันไม่ได้หมายความว่าฉันกำลังเขียนอินเทอร์เฟซสำหรับแต่ละคลาสที่ฉันเขียน ดังนั้นรหัสฉลาดฉันท้ายด้วย2 : public interface ICommonFunc { …

4
อะไรคือความแตกต่างระหว่างตัวแปรคลาสและตัวแปรอินสแตนซ์ใน Java? [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันใหม่กับ Java และต้องการเข้าใจความแตกต่างระหว่างตัวแปรคลาสและตัวแปรอินสแตนซ์ ตัวอย่างเช่น: class Bicycle { static int cadence = 0; int speed = 0; int gear = 1; } ตัวแปรอินสแตนซ์และตัวแปรคลาสแตกต่างจากกันอย่างไร ตัวแปรใดที่นี่คือตัวแปรคลาสและตัวแปรอินสแตนซ์ใด สิ่งนี้มีผลต่อขอบเขตอย่างไร
16 java  class  object  instance 

6
ทดสอบหน่วยวิธีส่วนตัวใน c ++ โดยใช้คลาสเพื่อน
ฉันรู้ว่านี่เป็นวิธีปฏิบัติที่ถกเถียงกัน แต่สมมติว่านี่เป็นตัวเลือกที่ดีที่สุดสำหรับฉัน ฉันสงสัยเกี่ยวกับเทคนิคที่แท้จริงในการทำสิ่งนี้ วิธีการที่ฉันเห็นคือ: 1) สร้างคลาสเพื่อนที่เป็นคลาสที่ฉันต้องการทดสอบ 2) ในคลาสเพื่อนสร้างวิธีสาธารณะที่เรียกวิธีส่วนตัวของคลาสที่ทดสอบ 3) ทดสอบวิธีสาธารณะของเพื่อนชั้น นี่เป็นตัวอย่างง่ายๆที่แสดงให้เห็นถึงขั้นตอนข้างต้น: #include <iostream> class MyClass { friend class MyFriend; // Step 1 private: int plus_two(int a) { return a + 2; } }; class MyFriend { public: MyFriend(MyClass *mc_ptr_1) { MyClass *mc_ptr = mc_ptr_1; } int plus_two(int a) // Step …

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? เมื่อใดที่แนะนำ / …

5
การสืบทอด vs คุณสมบัติเพิ่มเติมที่มีค่า Null
สำหรับคลาสที่มีฟิลด์เป็นตัวเลือกจะดีกว่าถ้าใช้การสืบทอดหรือคุณสมบัติที่เป็นโมฆะ? ลองพิจารณาตัวอย่างนี้: class Book { private String name; } class BookWithColor extends Book { private String color; } หรือ class Book { private String name; private String color; //when this is null then it is "Book" otherwise "BookWithColor" } หรือ class Book { private String name; private Optional<String> color; //when …
12 java  inheritance  class  null 

5
การออกแบบที่ดีคืออะไรเพื่อหลีกเลี่ยงการขอประเภทรอง
ฉันได้อ่านว่าเมื่อโปรแกรมของคุณจำเป็นต้องรู้ว่าคลาสคืออะไรวัตถุมักจะบ่งบอกถึงข้อบกพร่องในการออกแบบดังนั้นฉันจึงต้องการที่จะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีในการจัดการกับสิ่งนี้ ฉันกำลังใช้รูปร่างคลาสที่มีคลาสย่อยต่าง ๆ ซึ่งสืบทอดมาจากมันเช่นวงกลมโพลีกอนหรือสี่เหลี่ยมผืนผ้าและฉันได้อัลกอริธึมที่แตกต่างกันเพื่อทราบว่าวงกลมชนกับรูปหลายเหลี่ยมหรือสี่เหลี่ยมผืนผ้า จากนั้นสมมติว่าเรามีสองอินสแตนซ์ของรูปร่างและต้องการทราบว่าหนึ่งชนกันในวิธีที่ฉันจะอนุมานประเภท subclass เป็นวัตถุที่ฉันกำลังชนกันเพื่อที่จะรู้ว่าอัลกอริทึมที่ฉันควรจะเรียก แต่นี่คือ การออกแบบหรือการปฏิบัติที่ไม่ดี? นี่คือวิธีที่ฉันแก้ไขมัน abstract class Shape { ShapeType getType(); bool collide(Shape other); } class Circle : Shape { getType() { return Type.Circle; } bool collide(Shape other) { if(other.getType() == Type.Rect) { collideCircleRect(this, (Rect) other); } else if(other.getType() == Type.Polygon) { collideCirclePolygon(this, (Polygon) other); …

3
คลาส `Employee` ควรได้รับการออกแบบอย่างไร?
ฉันกำลังพยายามสร้างโปรแกรมสำหรับจัดการพนักงาน อย่างไรก็ตามฉันไม่สามารถหาวิธีออกแบบEmployeeชั้นเรียนได้ เป้าหมายของฉันคือการสามารถสร้างและจัดการข้อมูลพนักงานในฐานข้อมูลโดยใช้Employeeวัตถุ การใช้งานขั้นพื้นฐานที่ฉันคิดว่าเป็นเรื่องง่าย ๆ นี้: class Employee { // Employee data (let's say, dozens of properties). Employee() {} Create() {} Update() {} Delete() {} } ด้วยการใช้งานนี้ฉันพบปัญหาหลายประการ IDของพนักงานจะได้รับจากฐานข้อมูลดังนั้นหากผมใช้วัตถุสำหรับการอธิบายเป็นพนักงานใหม่จะไม่มีIDการจัดเก็บเลยในขณะที่วัตถุที่เป็นตัวแทนของพนักงานที่มีอยู่จะIDมี ดังนั้นฉันจึงมีคุณสมบัติที่บางครั้งอธิบายวัตถุและบางครั้งก็ไม่ (ซึ่งอาจบ่งบอกว่าเราละเมิดSRPเนื่องจากเราใช้คลาสเดียวกันสำหรับตัวแทนพนักงานใหม่และพนักงานปัจจุบัน ... ) Createวิธีการที่ควรจะสร้างการทำงานของพนักงานในฐานข้อมูลได้ในขณะที่UpdateและDeleteควรจะดำเนินการกับพนักงานที่มีอยู่ (อีกครั้งSRP ... ) วิธีการ 'สร้าง' ควรมีพารามิเตอร์ใด มีพารามิเตอร์หลายสิบสำหรับข้อมูลพนักงานทั้งหมดหรืออาจเป็นEmployeeวัตถุ? ชั้นควรจะไม่เปลี่ยนรูป? จะUpdateทำงานอย่างไร จะใช้คุณสมบัติและอัปเดตฐานข้อมูลหรือไม่ หรืออาจจะใช้วัตถุสองชิ้น - อันเก่าและอันใหม่และอัพเดทฐานข้อมูลด้วยความแตกต่างระหว่างพวกมัน (ฉันคิดว่าคำตอบเกี่ยวข้องกับคำตอบเกี่ยวกับความไม่แน่นอนของชั้นเรียน) อะไรคือความรับผิดชอบของผู้สร้าง? สิ่งที่จะเป็นพารามิเตอร์ที่ใช้? มันจะดึงข้อมูลพนักงานจากฐานข้อมูลโดยใช้idพารามิเตอร์และเติมคุณสมบัติหรือไม่ …

4
คลาสที่ซ้อนกัน: เครื่องมือที่มีประโยชน์หรือการละเมิดการห่อหุ้มข้อมูลหรือไม่
ดังนั้นฉันยังอยู่บนรั้วว่าควรใช้สิ่งเหล่านี้หรือไม่ ฉันรู้สึกว่ามันเป็นการละเมิด encapsulation อย่างมาก แต่ฉันพบว่าฉันสามารถบรรลุระดับการห่อหุ้มได้ในขณะที่เพิ่มความยืดหยุ่นในโค้ดของฉัน โปรเจ็กต์ Java / Swing ก่อนหน้านี้ฉันใช้คลาสที่ซ้อนกันในระดับหนึ่ง แต่ตอนนี้ฉันได้ย้ายไปยังโปรเจ็กต์อื่นใน C # และฉันหลีกเลี่ยงการใช้งาน คุณรู้สึกอย่างไรเกี่ยวกับคลาสที่ซ้อนกัน?

5
วิธีแก้ปัญหาการพึ่งพาซึ่งกันและกันในรหัส C ++ ของฉันได้อย่างไร
ใน C ++ โครงการของฉันฉันมีสองชั้นและParticle ContactในParticleระดับที่ฉันมีตัวแปรสมาชิกstd::vector<Contact> contactsที่มีรายชื่อทั้งหมดของParticleวัตถุและสอดคล้องฟังก์ชันสมาชิกและgetContacts() addContact(Contact cont)ดังนั้นใน "Particle.h" ฉันรวม "Contact.h" ในContactชั้นเรียนฉันต้องการเพิ่มรหัสไปยังตัวสร้างContactที่จะเรียกParticle::addContact(Contact cont)เพื่อให้contactsมีการปรับปรุงสำหรับParticleวัตถุทั้งสองระหว่างContactวัตถุที่จะถูกเพิ่ม ดังนั้นฉันจะต้องรวม "Particle.h" ใน "Contact.cpp" คำถามของฉันคือสิ่งนี้เป็นที่ยอมรับ / ฝึกการเขียนโปรแกรมที่ดีหรือไม่และหากไม่มีสิ่งใดจะเป็นวิธีที่ดีกว่าที่จะใช้สิ่งที่ฉันพยายามทำให้สำเร็จ (เพียงแค่อัปเดตรายชื่อผู้ติดต่อสำหรับอนุภาคเฉพาะโดยอัตโนมัติ ถูกสร้าง) คลาสเหล่านี้จะถูกผูกเข้าด้วยกันโดยNetworkคลาสที่จะมี N particles ( std::vector<Particle> particles) และ Nc contact ( std::vector<Contact> contacts) แต่ฉันต้องการที่จะมีฟังก์ชั่นเช่นparticles[0].getContacts()- มันไม่เป็นไรที่จะมีฟังก์ชั่นดังกล่าวในParticleชั้นเรียนในกรณีนี้หรือมีโครงสร้าง "เชื่อมโยง" ที่ดีขึ้นใน C ++ สำหรับวัตถุประสงค์นี้ (ของสองคลาสที่เกี่ยวข้องที่ใช้ในชั้นเรียนอื่น) . ฉันอาจต้องเปลี่ยนมุมมองที่นี่ในวิธีที่ฉันเข้าใกล้นี้ เนื่องจากทั้งสองคลาสเชื่อมต่อกันด้วยNetworkอ็อบเจกต์คลาสเป็นรหัสองค์กร / คลาสทั่วไปที่มีข้อมูลการเชื่อมต่อที่ควบคุมโดยNetworkวัตถุทั้งหมด (ในที่วัตถุ Particle ไม่ควรรับรู้รายชื่อผู้ติดต่อและดังนั้นจึงไม่ควรมีgetContacts()สมาชิก …

3
มันหมายถึงอะไรในการฉีดข้อมูล (พฤติกรรมเทียบ) ในตัวสร้างคลาสและทำไมจึงถือว่าการปฏิบัติที่ไม่ดี?
ฉันกำลังอ่านหนังสือ "Learning TypeScript" โดย Remo Jansen ในส่วนเดียวผู้เขียนอธิบายถึงวิธีการสร้างกรอบงาน MVC ที่พิสูจน์ง่ายของแนวคิดรวมถึงวิธีการสร้างModelชั้นเรียนและกล่าวว่าต่อไปนี้: รูปแบบจะต้องมี URL ของบริการบนเว็บที่ใช้ พวกเราจะใช้ตัวตกแต่งคลาสชื่อ ModelSettings เพื่อตั้งค่า URL ของบริการที่จะใช้ เราสามารถฉีด URL บริการผ่านทางคอนสตรัค แต่ก็ถือว่ามีการปฏิบัติที่ไม่ดีที่จะฉีดข้อมูล (เมื่อเทียบกับพฤติกรรม) ผ่านการสร้างคลาส ฉันไม่เข้าใจประโยคสุดท้าย โดยเฉพาะฉันไม่เข้าใจว่า "ฉีดข้อมูล" หมายความว่าอย่างไร สำหรับผมแล้วดูเหมือนว่าในการนำเสนอคลาสจาวาเกือบทั้งหมดโดยใช้ตัวอย่างที่ง่ายกว่านั้นจะมีการแนะนำข้อมูล ("injected"?) ลงใน Constructor ผ่านพารามิเตอร์ ตัวอย่างเช่น: class Person { constructor(name) { this.name = name; } } แน่นอนฉันคิดว่าnameเป็นข้อมูลไม่ใช่เป็นพฤติกรรมและรวมอยู่ในระดับสากลในตัวอย่างประเภทนี้เป็นพารามิเตอร์ตัวสร้างและไม่เคยมีการเอ่ยถึงว่านี่เป็นการปฏิบัติที่ไม่ดี ฉันคิดว่าฉันเข้าใจผิดบางอย่างในคำพูดข้างต้นไม่ว่า "data" หรือ "inject" หมายถึงอะไร คำตอบของคุณอาจรวมถึงคำอธิบายว่าเมื่อใดที่ไหนอย่างไรและทำไมต้องใช้มัณฑนากรใน …

6
สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด
สิ่งใดที่คุณเรียกคลาสที่ไม่มีเมธอด ตัวอย่างเช่น, class A { public string something; public int a; } ด้านบนเป็นคลาสที่ไม่มีวิธีการใด ๆ คลาสประเภทนี้มีชื่อพิเศษหรือไม่?

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