ข้ามไปยังเนื้อหา

การสร้างคลาส

AP Computer Science A · หัวข้อ 3

ดูสไลด์ ฝึกฝน
บทเรียนวิดีโอสำหรับหัวข้อนี้ เปิดหน้าวิดีโอ
7:26

การสร้างคลาส

นี่คือนักเรียน ซึ่งจัดเก็บเป็นตัวแปรอิสระสามตัว: ชื่อ, ปีการศึกษา, และเกรด. นั่นทำงานได้ดี.ตอนนี้เพิ่มนักเรียนอีกพันคน. คุณจำเป็นต้องใช้ตัวแปรสามพันตัว…

การบรรยายภาษาอังกฤษ · คำบรรยายภาษาอังกฤษ + 中文 ลอยตัวบนภาพ

3.1

การนามธรรมและการออกแบบโปรแกรม

หลักสูตร

วัตถุประสงค์การเรียนรู้ 3.1.A: แสดงการออกแบบโปรแกรมโดยใช้ภาษาธรรมชาติหรือสร้างแผนภาพที่ระบุคลาสในโปรแกรมและ抽象ข้อมูลและกระบวนการที่พบในแต่ละคลาสโดยรวมถึงคุณสมบัติและการกระทำทั้งหมด

  • 3.1.A.1 Abstraction คือกระบวนการลดความซับซ้อนด้วยการมุ่งเน้นไปที่แนวคิดหลัก通过将ไม่เกี่ยวข้องกับคำถามปัจจุบันซ่อนไว้และรวบรวมรายละเอียดที่เกี่ยวข้องและมีประโยชน์เข้าด้วยกัน Abstraction ช่วยลดความซับซ้อนและทำให้สามารถมุ่งเน้นไปที่แนวคิดได้
  • 3.1.A.2 Data abstraction ให้การแยกระหว่างคุณสมบัติเชิงนามธรรมของชนิดข้อมูล รายละเอียดจริงของการแสดงผล Data abstraction จัดการความซับซ้อนโดยให้ชื่อแก่ข้อมูลโดยไม่อ้างอิงรายละเอียดเฉพาะของการแสดงผล ข้อมูลอาจอยู่ในรูปแบบของตัวแปรเดียวหรือกลุ่มข้อมูล เช่น ในคลาสหรือชุดข้อมูล
  • 3.1.A.3 Attribute เป็นประเภทหนึ่งของ Data abstraction ที่กำหนดไว้ในคลาสภายนอก-method หรือ constructor Instance variable เป็น attribute ที่มีค่าเฉพาะสำหรับแต่ละ instance ของคลาส Class variable เป็น attribute ที่แบ่งปันโดยทุก instance ของคลาส
  • 3.1.A.4 Procedural abstraction ให้ชื่อสำหรับกระบวนการและทำให้สามารถใช้ method ได้โดยรู้เพียงว่าทำอะไร ไม่ใช่วิธีการทำ ผ่าน method decomposition นักเขียนโปรแกรมจะย่อยพฤติกรรมขนาดใหญ่ของคลาสออกเป็นพฤติกรรมย่อยๆ โดยการสร้าง methods เพื่อแสดงพฤติกรรมย่อยแต่ละอย่าง Procedural abstraction อาจดึงคุณลักษณะที่ร่วมกันมาเพื่อทำให้ฟังก์ชัน性工作ทั่วไปแทนที่จะทำซ้ำโค้ด สิ่งนี้ช่วยให้ใช้โค้ดซ้ำได้ ซึ่งช่วยจัดการความซับซ้อน
  • 3.1.A.5 การใช้ parameters ช่วยให้ procedures可以被 generalize ทำให้ procedures สามารถถูก reuse ด้วยช่วงของ input values หรือ arguments
  • 3.1.A.6 การใช้ procedural abstraction ในโปรแกรมอนุญาตให้นักเขียนโปรแกรมเปลี่ยนแปลงภายในของ method (เพื่อให้เร็วขึ้น มีประสิทธิภาพมากขึ้น ใช้พื้นที่จัดเก็บน้อยลง ฯลฯ) โดยไม่ต้องแจ้ง给用户关于การเปลี่ยนแปลงตราบใดที่ method signature และสิ่งที่ method ทำยังคงอยู่
  • 3.1.A.7 ก่อนที่จะดำเนินการสร้างคลาส จะเป็นการดีที่จะใช้เวลาในการออกแบบแต่ละคลาส รวมถึง properties และ behaviors การออกแบบนี้สามารถแสดงได้ด้วยภาษาธรรมชาติหรือแผนภาพ

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

จิ๊กซอว์กำลังประกอบ: คลาสและเมทόδเป็นชิ้นส่วนแยกส่วนของการออกแบบโปรแกรมที่ใหญ่ขึ้น
จิ๊กซอว์กำลังประกอบ: คลาสและเมทόδเป็นชิ้นส่วนแยกส่วนของการออกแบบโปรแกรมที่ใหญ่ขึ้น

นามธรรม หมายถึงการซ่อนรายละเอียดไว้เบื้องหลังอินเทอร์เฟซที่เรียบง่าย – คุณใช้ String โดยไม่ต้องรู้วิธีการจัดเก็บข้อมูล ตัวอักษร การออกแบบที่ดีจะแบ่งปัญหาออกเป็นคลาส แต่ละคลาสรับผิดชอบแนวคิดหนึ่งประเด็น หัวขอนี้เกี่ยวกับการเขียน คลาสของคุณเอง

การย่อยสลายโปรแกรมออกเป็นโมดูลและซับโมดูล
การแยกย่อยโปรแกรมออกเป็นโมดูลและ submodule
3.2

ผลกระทบของการออกแบบโปรแกรม

หลักสูตร

วัตถุประสงค์การเรียนรู้ 3.2.A: อธิบายผลกระทบทางสังคมและจริยธรรมของระบบคอมพิวเตอร์

  • 3.2.A.1 System reliability หมายถึงความสามารถของโปรแกรมในการดำเนินงานตามหน้าที่ที่กำหนดภายใต้เงื่อนไขที่ระบุไว้โดยไม่เกิดความล้มเหลว นักเขียนโปรแกรมควรพยายามเพิ่ม System reliability ให้มากที่สุดโดยการทดสอบโปรแกรมด้วยสภาวะต่างๆ
  • 3.2.A.2 การสร้างโปรแกรมมีผลกระทบต่อสังคม เศรษฐกิจ และวัฒนธรรม ผลกระทบเหล่านี้สามารถเป็นทั้งประโยชน์และอันตราย โปรแกรมที่ออกแบบมาเพื่อตอบสนองความต้องการหรือแก้ปัญหาอาจก่อให้เกิดผลกระทบทางลบที่ไม่ได้ตั้งใจเหนือกว่าการใช้ตามวัตถุประสงค์
  • 3.2.A.3 ปัญหาทางกฎหมายและข้อกังวลเรื่องทรัพย์สินทางปัญญาเกิดขึ้นเมื่อการสร้างโปรแกรม นักเขียนโปรแกรมมักนำโค้ดที่เขียนโดยผู้อื่นมาใช้ใหม่และเผยแพร่ในรูปแบบ open source ซึ่งใช้งานฟรี การนำโค้ดที่ไม่ได้เผยแพร่ในรูปแบบ open source มาใช้ต้องได้รับอนุญาตจากเจ้าของและมักจะซื้อลิขสิทธิ์ก่อนนำไปรวมในโปรแกรม

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

การเลือกการออกแบบมีผลต่อความถูกต้อง ความอ่านง่าย และการนำโค้ดไปใช้ใหม่ การห่อหุ้ม (Encapsulation) – การเก็บข้อมูลให้เป็นส่วนตัวและเปิดเผยผ่านเมทόδเท่านั้น – ช่วยปกป้องสถานะของออบเจกต์จากการใช้งานที่ไม่เหมาะสมและให้คุณสามารถแก้ไขด้านในโดยไม่ทำให้ผู้ใช้คลาสเสียไป การตั้งชื่ออย่างรอบคอบ เมทόδที่มีวัตถุประสงค์เดียว และการทดสอบช่วยลดข้อผิดพลาดได้

การออกแบบยังมีความรับผิดชอบเกินกว่าแค่โค้ด ความน่าเชื่อถือของระบบ – โปรแกรมที่ทำหน้าที่ตาม的预期โดยไม่ล้มเหลว – เป็นสิ่งที่นักพัฒนาควรเพิ่มสูงสุดผ่านการออกแบบและการทดสอบอย่างพิถีพิถัน โปรแกรมมีผลกระทบจริงต่อสังคม เศรษฐกิจ และวัฒนธรรม ซึ่งอาจเป็น ทั้งประโยชน์และอันตราย และการสร้างโปรแกรมยกเรื่อง กฎหมายและทรัพย์สินทางปัญญา ขึ้นมา: นักพัฒนามักนำโค้ดที่เผยแพร่เป็น code แบบ open source มาใช้ใหม่และใช้ฟรี แต่ต้องเคารพใบอนุญาตและให้เครดิตแทนที่จะลอกผลงานของผู้อื่นมาเป็นของตนเอง

คำศัพท์ ฝึกฝน
English ไทย
Abstraction/əbˈstrækʃn/ Abstraction
Encapsulation/ɪnˌkæpsjʊˈleɪʃn/ การห่อหุ้มข้อมูล (Encapsulation)
System reliability/ˈsɪstəm rɪˌlaɪəˈbɪlɪti/ ความน่าเชื่อถือของระบบ
legal and intellectual-property/ˈliːɡl ænd ˌɪntəˈlektʃuːəl ˈprɒpəti/ ด้านกฎหมายและทรัพย์สินทางปัญญา
open source/ˈəʊpən sɔːs/ open source
instance variables/ˈɪnstəns ˈveərɪəblz/ instance variables
3.3

กายวิภาคศาสตร์ของคลาส

หลักสูตร

จุดประสงค์การเรียนรู้ 3.3.A: เขียนโค้ดเพื่อกำหนดขอบเขตการเข้าถึงและเงื่อนไขความมองเห็นสำหรับคลาส ข้อมูล ตัวสร้าง (constructors) และเมท็ด

  • 3.3.A.1 การห่อหุ้มข้อมูล (Data encapsulation) เป็นเทคนิคที่ซ่อนรายละเอียดการดำเนินการภายในของคลาสไม่ให้คลาสภายนอกเห็น คีย์เวิร์ด public และ private มีผลต่อการเข้าถึงของคลาส ข้อมูล ตัวสร้าง และเมท็ด คีย์เวิร์ด private จำกัดการเข้าถึงเฉพาะในคลาสผู้ประกาศ ในขณะที่คีย์เวิร์ด public อนุญาตให้เข้าถึงได้จากคลาสอื่นนอกเหนือจากคลาสผู้ประกาศ
  • 3.3.A.2 ในรายวิชานี้ คลาสจะถูกกำหนดให้始终是 public และประกาศด้วยคีย์เวิร์ด class
  • 3.3.A.3 ในรายวิชานี้ ตัวสร้างจะ始终以 public เสมอ
  • 3.3.A.4 ตัวแปรอินสแตนซ์ (Instance variables) เป็นของวัตถุ และแต่ละวัตถุจะมีสำเนาของตัวแปรนั้นเป็นของตัวเอง
  • 3.3.A.5 การเข้าถึงคุณสมบัติควรถูกจำกัดให้อยู่ภายในคลาสเพื่อให้บรรลุหลักการห่อหุ้มข้อมูล ดังนั้นจึงเป็นการปฏิบัติที่ดีในการกำหนดให้ตัวแปรอินสแตนซ์สำหรับคุณสมบัติเหล่านี้เป็น private เว้นแต่สเปกซิกิเคชันของคลาสจะระบุไว้ differently
  • 3.3.A.6 การเข้าถึงพฤติกรรมสามารถเป็นภายในหรือภายนอกคลาส เมท็ดที่กำหนดให้始终是 public สามารถเข้าถึงได้ทั้งภายในและภายนอกคลาส ในขณะที่เมท็ดที่กำหนดให้始终是 private สามารถเข้าถึงได้เฉพาะภายในคลาสเท่านั้น

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

คลาสประกอบด้วยสามส่วน: ตัวแปรinstance (fields) – ข้อมูลของออบเจกต์, คอนสตรัคเตอร์ (constructors) – สร้างออบเจกต์, และ เมทόδ (methods) – พฤติกรรม Fields มักจะเป็น private; Metods มักจะเป็น public:

A class diagram: private attributes and public methods
A class diagram: private attributes and public methods
public class Student {
    private String name;      // instance variable
    private int score;

    public Student(String n, int s) {   // constructor
        name = n;
        score = s;
    }
    public int getScore() { return score; }   // accessor
}
แผนภาพ: คลาสเป็นเทมเพลตที่กำหนดวิธีสร้างออบเจกต์ชนิดนั้น
แผนภาพ: คลาสเป็นเทมเพลตที่กำหนดวิธีสร้างออบเจกต์ชนิดนั้น
สำรวจ

เห็นฟิลด์ของ object เป็นกล่อง

class รวมข้อมูลที่เกี่ยวข้อง (fields) และเมทოდเข้าด้วยกัน Each object จะมีชุดกล่องฟิลด์ของตัวเอง; การ assign เข้าไปในกล่องของวัตถุหนึ่ง จะส่งผลต่อวัตถุนั้นเท่านั้น

คำศัพท์ ฝึกฝน
English ไทย
constructor/kənˈstrʌktə/ constructor
accessor (getter)/əkˈsesə/ accessor (getter)
3.4

คอนสตรัคเตอร์

หลักสูตร

จุดประสงค์การเรียนรู้ 3.4.A: เขียนโค้ดเพื่อประกาศตัวแปรอินสแตนซ์สำหรับคุณสมบัติที่จะเริ่มต้นค่าในส่วนของตัวสร้างของคลาส

  • 3.4.A.1 สถานะ (state) ของวัตถุหมายถึงคุณสมบัติและค่าของมัน ณ เวลาหนึ่งๆ และถูกกำหนดโดยตัวแปรอินสแตนซ์ที่เป็นของวัตถุนั้น สิ่งนี้กำหนดความสัมพันธ์แบบ has-a ระหว่างวัตถุกับตัวแปรอินสแตนซ์ของมัน
  • 3.4.A.2 ตัวสร้างใช้เพื่อตั้งค่าเริ่มต้นของวัตถุ ซึ่งควรประกอบด้วยค่าเริ่มต้นสำหรับตัวแปรอินสแตนซ์ทั้งหมด เมื่อมีการเรียกใช้ตัวสร้าง จะมีการจัดสรรหน่วยความจำสำหรับวัตถุและกลับคืนค่าอ้างอิงของวัตถุที่เกี่ยวข้อง พารามิเตอร์ของตัวสร้าง หากมีการระบุ จะให้ข้อมูล用来เริ่มต้นตัวแปรอินสแตนซ์
  • 3.4.A.3 เมื่อวัตถุที่แก้ไขได้ (mutable object) เป็นพารามิเตอร์ของตัวสร้าง ตัวแปรอินสแตนซ์ควรเริ่มต้นด้วยสำเนาของวัตถุที่ถูกอ้างอิง ด้วยวิธีนี้ ตัวแปรอินสแตนซ์จะไม่ถืออ้างอิงไปยังวัตถุต้นฉบับ และป้องกันไม่ให้เมท็ดแก้ไขสถานะของวัตถุต้นฉบับ
  • 3.4.A.4 เมื่อไม่มีการเขียนตัวสร้าง Java จะให้ตัวสร้างที่ไม่มีพารามิเตอร์ และตัวแปรอินสแตนซ์จะถูกตั้งค่าเป็นค่าเริ่มต้นตามชนิดข้อมูลของคุณสมบัติ ตัวสร้างนี้เรียกว่า ตัวสร้างเริ่มต้น (default constructor)
  • 3.4.A.5 ค่าเริ่มต้นของคุณสมบัติที่มีชนิด int คือ 0 ค่าเริ่มต้นของคุณสมบัติที่มีชนิด double คือ 0.0 ค่าเริ่มต้นของคุณสมบัติที่มีชนิด boolean คือ false ค่าเริ่มต้นของชนิดอ้างอิงคือ null

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

คอนสตรัคเตอร์ มี ชื่อเดียวกับคลาส และไม่มีประเภทข้อมูลกลับคืน มันจะทำงานเมื่อคุณเขียน new และหน้าที่ของมันคือการเริ่มต้นค่า fields คลาสสามารถมีคอนสตรัคเตอร์หลายตัวที่มีรายการพารามิเตอร์ต่างกัน (overloading); คอนสตรัคเตอร์ ไม่มีพารามิเตอร์ จะตั้งค่าเริ่มต้น

คำศัพท์ ฝึกฝน
English ไทย
overloading/ˌəʊvəˈləʊdɪŋ/ การโอเวอร์โหลด (Overloading)
3.5

เมทόδ: วิธีเขียน

หลักสูตร

จุดประสงค์การเรียนรู้ 3.5.A: เขียนโค้ดเพื่อกำหนดพฤติกรรมของวัตถุผ่านเมท็ดที่เขียนไว้ในคลาสโดยใช้ค่าพื้นฐาน และกำหนดผลลัพธ์ของการเรียกใช้เมท็ดเหล่านี้

  • 3.5.A.1 เมท็ด void ไม่คืนค่า หัวเมท็ดจะcontains คีย์เวิร์ด void ก่อนชื่อเมท็ด
  • 3.5.A.2 เมท็ดที่ไม่ใช่ void จะคืนค่าเดียว หัวเมท็ดจะ包含 return type แทนที่คีย์เวิร์ด void
  • 3.5.A.3 ในเมท็ดที่ไม่ใช่ void จะประเมินนิพจน์การคืนค่าที่สอดคล้องกับ return type และคืนค่าออก สิ่งนี้เรียกว่า return by value
  • 3.5.A.4 คีย์เวิร์ด return ใช้เพื่อส่งการควบคุมกลับไปยังจุดที่เมท็ดหรือตัวสร้างถูกเรียกใช้ โค้ดใดๆ ที่อยู่ถัดไปจากคำสั่ง return จะไม่เคย被执行 การ执行คำสั่ง return ภายใน selection หรือ iteration statement จะหยุดการทำงานของ statement นั้นและออกจากメท็ดหรือตัวสร้าง
  • 3.5.A.5 เมท็ด accessors อนุญาตให้วัตถุของคลาสอื่นรับสำเนาของค่าตัวแปรอินสแตนซ์หรือตัวแปรคลาส เมท็ด accessor เป็นเมท็ดที่ไม่ใช่ void
  • 3.5.A.6 เมท็ด mutators (modifiers) เป็นเมท็ดที่เปลี่ยนแปลงค่าของตัวแปรอินสแตนซ์หรือตัวแปรคลาส เมท็ด mutator มักจะเป็นเมท็ด void
  • 3.5.A.7 เมท็ดที่มีพารามิเตอร์จะรับค่าผ่านพารามิเตอร์เหล่านั้นและใช้ค่าเหล่านั้นในการดำเนินงานตามหน้าที่ของเมท็ด
  • 3.5.A.8 เมื่ออาร์กิวเมนต์เป็นค่าพื้นฐาน พารามิเตอร์จะถูกเริ่มต้นด้วยสำเนาของค่านั้น การเปลี่ยนแปลงพารามิเตอร์ไม่มีผลต่ออาร์กิวเมนต์ที่เกี่ยวข้อง

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

เมทόδมี signature, ประเภทข้อมูลกลับคืน และ body accessor (getter) ส่งกลับข้อมูลโดยไม่เปลี่ยนออบเจกต์; mutator (setter) เปลี่ยน field เมทόδที่ส่งกลับค่าต้องมี return ที่มีประเภทที่ถูกต้องในทุกเส้นทาง; เมทόδ void ไม่ส่งอะไรกลับมาเลย

public void setScore(int s) { score = s; }   // mutator
public String toString() { return name + ": " + score; }
สำรวจ

ติดตามการเรียกเมทόδและการส่งคืนค่า

การเรียก method จะเพิ่ม frame ที่มีพารามิเตอร์ลงบนสัก เมื่อเจอ return frame นั้นจะถูกนำออกและค่าถูกส่งกลับไปยังผู้เรียก

คำศัพท์ ฝึกฝน
English ไทย
mutator (setter)/mjuːˈteɪtə/ mutator (setter)
static (class) variable/ˈstætɪk ˈveərɪəbl/ ตัวแปรคลาส (ตัวแปรแบบสถิต)
3.6

การส่งและส่งกลับอ้างอิงของออบเจกต์

หลักสูตร

จุดประสงค์การเรียนรู้ 3.6.A: เขียนโค้ดเพื่อกำหนดพฤติกรรมของวัตถุผ่านเมท็ดที่เขียนไว้ในคลาสโดยใช้อ้างอิงวัตถุ และกำหนดผลลัพธ์ของการเรียกใช้เมท็ดเหล่านี้

  • 3.6.A.1 เมื่ออาร์กิวเมนต์เป็นอ้างอิงถึงวัตถุ (object reference) พารามิเตอร์จะถูกเริ่มต้นด้วยสำเนาของอ้างอิงนั้น; ไม่มีการสร้างสำเนาอิสระใหม่ของวัตถุ หากพารามิเตอร์อ้างอิงถึงวัตถุที่แก้ไขได้ (mutable object) เมธอดหรือคอนสตรักเตอร์สามารถใช้ อ้างอิงนี้ในการเปลี่ยนแปลงสถานะของวัตถุ เป็นปฏิบัติที่ดีในการเขียนโปรแกรมที่ไม่ควรแก้ไขวัตถุที่แก้ไขได้ซึ่งส่งมาเป็นพารามิเตอร์ เว้นแต่จะระบุไว้ในข้อกำหนด
  • 3.6.A.2 เมื่อนิพจน์การคืนค่า (return expression) ประเมินผลเป็นอ้างอิงถึงวัตถุ จะมีการคืนค่าอ้างอิงนั้น ไม่ใช่การคืนค่าอ้างอิงไปยังสำเนาใหม่ของวัตถุ
  • 3.6.A.3 เมธอดไม่สามารถเข้าถึงข้อมูลส่วนตัวและเมธอดส่วนตัวของพารามิเตอร์ที่ถืออ้างอิงถึงวัตถุได้ เว้นแต่พารามิเตอร์จะมีประเภทเดียวกันกับคลาสที่ห่อหุ้มเมธอด

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

= copies the reference, not the object

เมื่อคุณส่งออบเจกต์เข้าเมทόδ Java จะคัดลอก reference ดังนั้นเมทόδจึงกระทำกับ ออบเจกต์เดียวกัน – การเปลี่ยนแปลงใน fields ของมันจะมองเห็นได้โดยผู้เรียก (Primitives ถูกคัดลอกด้วยค่า ดังนั้นการเปลี่ยนแปลงจึงไม่เห็น) เมทόδยังสามารถ ส่งกลับ reference ไปยังออบเจกต์ได้ เนื่องจาก String เป็นสิ่งที่ไม่สามารถเปลี่ยนแปลงได้ การส่งมันจึงปลอดภัย; การส่งออบเจกต์ที่เปลี่ยนแปลงได้会让メソッドเปลี่ยนมันได้

Java ส่งค่าด้วยค่า: เมทόδรับสำเนา; การส่งจริงด้วย reference ซึ่ง Java ไม่มี จะช่วยให้เมทόδกำหนดค่าตัวแปรของผู้เรียกใหม่ได้
Java ส่งค่าด้วย ค่าเสมอ (ซ้าย): เมทόδได้รับสำเนาของ reference การส่งจริงด้วย reference (ขวา) – ซึ่ง Java ไม่มี – จะช่วยให้เมทόδกำหนดค่าตัวแปรของผู้เรียกใหม่ได้.

ทักษะสอบ: ต้องรู้ว่าการทำ mutate ใน fields ของออบเจกต์ภายในเมทόδจะมีผลต่อของเดิม แต่ การกำหนดค่าใหม่ ให้พารามิเตอร์ (param = new...) จะไม่มีผลต่อผู้เรียก

ตัวอย่างฝึกฝน. สมมติว่า s เป็น Student ที่คะแนน 50, และเราเรียก tweak(s):

public static void tweak(Student a) {
    a.setScore(100);          // (1) mutates the shared object
    a = new Student("Z", 0);  // (2) repoints the local copy only
    a.setScore(5);            // (3) changes only the new local object
}

บรรทัด (1) เปลี่ยนแปลงออบเจกต์ที่ s ชี้ไปยัง ทำให้ผู้เรียกเห็น 100 บรรทัด (2) ทำให้สำเนาของ reference ภายในเมทόδชี้ไปยังออบเจกต์ใหม่ – s ของผู้เรียกไม่ถูกแตะต้อง – และบรรทัด (3) ส่งผลเฉพาะต่อออบเจกต์ใหม่นั้น หลังการเรียก s.getScore() คือ 100: การ mutate ติดไปแต่การกำหนดค่าใหม่ไม่ได้

3.7

ตัวแปรคลาสและเมทόδคลาส

หลักสูตร

วัตถุประสงค์การเรียนรู้ 3.7.A: เขียนโค้ดเพื่อกำหนดพฤติกรรมของคลาสผ่านเมธอดคลาส

  • 3.7.A.1 เมธอดคลาสไม่สามารถเข้าถึงหรือเปลี่ยนแปลงค่าของตัวแปรอินสแตนซ์หรือเรียกเมธอดอินสแตนซ์ได้โดยไม่ได้รับอินสแตนซ์ของคลัสมาทางพารามิเตอร์
  • 3.7.A.2 เมธอดคลาสสามารถเข้าถึงหรือเปลี่ยนแปลงค่าของตัวแปรคลาสและสามารถเรียกเมธอดคลาสอื่นๆ ได้

วัตถุประสงค์การเรียนรู้ 3.7.B: เขียนโค้ดเพื่อประกาศตัวแปรคลาสที่เป็นของคลาส

  • 3.7.B.1 ตัวแปรคลาสเป็นของคลาส โดยวัตถุทั้งหมดของคลัสจะแบ่งปันสำเนาเดียวของตัวแปรคลาส ตัวแปรคลาสจะถูกกำหนดโดยคำสำคัญ static ก่อนชนิดของตัวแปร
  • 3.7.B.2 ตัวแปรคลาสที่กำหนดด้วย public สามารถเข้าถึงภายนอกคลาสโดยใช้ชื่อคลาสและตัวดำเนินการจุด เนื่องจากมีความเกี่ยวข้องกับคลาส ไม่ใช่วัตถุของคลาส
  • 3.7.B.3 เมื่อตัวแปรถูกประกาศด้วย final ค่าของมันไม่สามารถแก้ไขได้

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

static เปรียบเทียบกับ instance fields

ตัวแปร static (class),中标记 static, ถูกแชร์โดย ทุก ออบเจกต์ของคลาส – มีเพียงสำเนาเดียว (เช่น ตัวนับว่ามีออบเจกต์อยู่กี่ตัว) เมทόδ static เป็นของคลาสและไม่สามารถใช้ instance fields โดยตรง เข้าถึงได้โดยชื่อคลาส: Student.getCount().

3.8

ขอบเขตและการเข้าถึง

หลักสูตร

วัตถุประสงค์การเรียนรู้ 3.8.A: อธิบายว่าตัวแปรสามารถใช้ใน何处ในโค้ด

  • 3.8.A.1 ตัวแปรท้องถิ่น คือตัวแปรที่ประกาศในหัวหรือตัวบล็อกของโค้ด ตัวแปรท้องถิ่นสามารถเข้าถึงได้เฉพาะในบล็อกที่ประกาศไว้เท่านั้น เนื่องจากคอนสตรักเตอร์และเมธอดเป็นบล็อกของโค้ด พารามิเตอร์ของคอนสตรักเตอร์หรือเมธอดจึงถือเป็นตัวแปรท้องถิ่นด้วย ตัวแปรเหล่านี้สามารถใช้ได้เฉพาะภายในคอนสตรักเตอร์หรือเมธอดเท่านั้น และไม่สามารถประกาศให้เป็น public หรือ private ได้
  • 3.8.A.2 เมื่อมีตัวแปรท้องถิ่นหรือพารามิเตอร์ที่มีชื่อกับตัวแปรอินสแตนซ์เหมือนกัน ชื่อตัวแปรจะอ้างอิงไปยังตัวแปรท้องถิ่นแทนที่จะเป็นตัวแปรอินสแตนซ์ภายในตัวบล็อคของคอนสตรักเตอร์หรือเมธอด

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

Scope คือตำแหน่งที่ชื่อปรากฏให้เห็น local variable ที่ประกาศในเมท่อมจะมีอยู่เฉพาะภายในนั้น; parameter มีอยู่เฉพาะในเมทოდ它那; instance variable เห็นได้ตลอดทั้งออบเจกต์ Access modifiers ควบคุมการมองเห็นข้ามคลาส: private (คลาสนี้เท่านั้น) เทียบกับ public (ทุกที่) Local variables shadow fields ที่มีชื่อเดียวกัน – ซึ่งเป็นแหล่งกำเนิดของข้อผิดพลาด

ตัวแปร global เห็นได้ทุกที่; local variable เห็นได้เฉพาะภายใน block ของมัน
ตัวแปร global เห็นได้ทุกที่; local variable เห็นได้เฉพาะภายใน block ของมัน
คำศัพท์ ฝึกฝน
English ไทย
Scope/skəʊp/ ขอบเขต
3.9

คำว่า this

หลักสูตร

วัตถุประสงค์การเรียนรู้ 3.9.A: เขียนโค้ดสำหรับนิพจน์ที่อ้างอิงถึงตนเองและกำหนดผลลัพธ์ของนิพจน์เหล่านี้

  • 3.9.A.1 ภายในเมธอดอินสแตนซ์หรือคอนสตรักเตอร์ คำนำหน้า this ทำหน้าที่เป็นตัวแปรพิเศษที่ถืออ้างอิงถึงวัตถุปัจจุบัน—คือวัตถุwhoseメソッドหรือコンストラクタが呼ばれています。
  • 3.9.A.2 คำนำหน้า this สามารถใช้เพื่อส่งวัตถุปัจจุบันเป็นอาร์กิวเมนต์ในการเรียกเมธอด
  • 3.9.A.3 เมธอดคลาสไม่มีอ้างอิงถึง this

แหล่งที่มา: คำอธิบายหลักสูตรและข้อสอบ College Board AP

this อ้างถึง วัตถุปัจจุบัน ใช้เพื่อแยกแยะฟิลด์ออกจากพารามิเตอร์ที่มีชื่อเดียวกัน หรือเรียกเมทόδอื่นของวัตถุเดียวกัน:

public Student(String name, int score) {
    this.name = name;      // this.name is the field; name is the parameter
    this.score = score;
}

ทักษะสำหรับการสอบ: เมื่อพารามิเตอร์ของคอนสตรัคเตอร์หรือเซตเตอร์มีชื่อเดียวกับฟิลด์ คุณ ต้อง เขียน this.field = param – หากไม่มี this การกำหนดค่าจะไม่ได้ผลอะไรเลย

3.9

ข้อแนะนำสำหรับการสอบ

  • ออกแบบด้วยเมทόδและคลาส: ห่อหุ้มข้อมูลเป็นฟิลด์ private และเปิดใช้งานพฤติกรรมผ่านเมทόδสาธารณะ
  • รู้ความแตกต่างระหว่าง วัตถุ กับ คลาส ของมัน และว่าวัตถุถูกส่งเข้าโดย ค่า — พารามิเตอร์รับสำเนาของรีเฟอเรนซ์ ดังนั้นเมทόδสามารถเปลี่ยนสถานะของวัตถุได้ แต่การกำหนดค่าใหม่ให้พารามิเตอร์จะไม่ส่งผลต่อผู้เรียก (Java ไม่มีระบบส่งเข้าโดยรีเฟอเรนซ์)
  • ท่องผ่านอาร์เรย์และ ArrayList อย่างปลอดภัย — ขนาดคือ length เทียบกับ .size() และการลบองค์ประกอบในระหว่างลูปจะทำให้ดัชนีเลื่อน
  • ติดตาม เมทόδแบบ récursive เพื่อกำหนดผลลัพธ์: หาเคสฐานก่อน แล้วตามการเรียก récursive แต่ละครั้งไปยังค่าที่กลับคืนมา (การเขียนโค้ด récursiveอยู่นอกขอบเขตของการสอบ)
  • จำคำศัพท์เกี่ยวกับ การสืบทอด ได้ — ซูเปอร์คลาส, สับคลาส, การทับเมทόδ และว่าทุกคลาสเป็นสับคลาสของ Object (การออกแบบและดำเนินการสืบทอดอยู่นอกขอบเขตของการสอบ)

บทเรียนเชิงโต้ตอบสำหรับหัวข้อนี้

ทำทีละขั้นตอน พร้อมแบบฝึกหัดตรวจสอบผลทันที

ข้อสอบย้อนหลัง

หัวข้อเพิ่มเติมใน AP Computer Science A

เข้าสู่ระบบหรือสร้างบัญชี

IGCSE, A-Level & AP