วิธีการใช้ Data Abstraction ใน Java?
เผยแพร่แล้ว: 2022-05-17สิ่งที่เป็นนามธรรม ความหลากหลาย การห่อหุ้ม และการสืบทอดเป็นองค์ประกอบพื้นฐานสี่ประการของการเขียนโปรแกรมเชิงวัตถุ หนึ่งในนั้นคือ Data Abstraction จะกล่าวถึงโดยละเอียดในบทความต่อไปนี้ เราจะได้เรียนรู้วิธีดำเนินการ data abstraction ใน Java ด้วย
นามธรรมข้อมูลคืออะไร?
การแยกข้อมูลเป็นคุณลักษณะเฉพาะที่แสดงให้ผู้ใช้เห็นรายละเอียดที่สำคัญที่สุดเท่านั้น ผู้ใช้จะไม่รับรู้ถึงรายละเอียดที่ไม่สำคัญหรือไม่จำเป็น ตัวอย่างเช่น รถยนต์ถือเป็นส่วนรวมมากกว่าชิ้นส่วนที่แตกต่างกัน การปฏิบัติในการระบุเฉพาะคุณลักษณะที่จำเป็นของรายการในขณะที่ละทิ้งข้อมูลภายนอกนั้นเรียกว่า data abstraction
ในแง่ง่ายๆ data abstraction จะแสดงรายการที่สำคัญให้กับผู้ใช้ในขณะที่ซ่อนองค์ประกอบที่ไม่มีนัยสำคัญไว้
เราใช้คำหลัก "นามธรรม" เพื่อนำสิ่งที่เป็นนามธรรมไปใช้ด้วยความช่วยเหลือของคลาสและอินเทอร์เฟซ เราสามารถมีทั้งวิธีนามธรรมและรูปธรรมในชั้นเรียนนามธรรม
คลาสนามธรรมคืออะไร?
ในการเขียนโปรแกรมเชิงวัตถุ คลาสนามธรรมคือคลาสที่ประกาศวิธีการเชิงนามธรรมอย่างน้อยหนึ่งวิธี ความแตกต่างเพียงอย่างเดียวระหว่างคลาสนามธรรมและคลาส Java ปกติคือคลาสนามธรรมมีคีย์เวิร์ด abstract ในขณะที่คลาส Java ปกติไม่มี สำหรับการประกาศคลาสนามธรรม เราใช้คีย์เวิร์ด abstract ก่อนชื่อคลาส ในชั้นเรียนสามารถมีได้ทั้งวิธีนามธรรมและรูปธรรม อย่างไรก็ตาม วิธีการที่เป็นนามธรรมไม่สามารถแสดงในคลาสปกติได้ คลาสที่มีเมธอดนามธรรมอย่างน้อยหนึ่งวิธีเรียกว่าคลาสนามธรรม
ไวยากรณ์ของมันคือ:
คลาสนามธรรมสาธารณะ Name_of_Class
{
บทคัดย่อสาธารณะ Name_of_Method();
}
ตัวอย่างของการนำคลาสนามธรรมไปใช้คือ:
//การตั้งชื่อคลาสนามธรรม
คลาสนามธรรม DemoClass
{
//การตั้งชื่อเมธอดนามธรรม
นามธรรมโมฆะ disp ();
}
//ดำเนินการกับคลาสนามธรรม
คลาสสาธารณะ MainClass ขยาย DemoClass
{
//กำหนดเมธอดของคลาสนามธรรม
การแสดงเป็นโมฆะ ()
{
System.out.println("วิธีนามธรรมที่เรียกว่า.");
}
โมฆะคงที่สาธารณะ main(String[] args)
{
MainClass obj = MainClass ใหม่ ();
//เรียกวิธีนามธรรม
obj.display();
}
}
ในการแสดงรายการตามจุด:
- คลาสต้องถูกกำหนดให้เป็นนามธรรมหากมีวิธีการที่เป็นนามธรรมอย่างน้อยหนึ่งวิธี
- คลาสที่ได้รับการประกาศให้เป็นนามธรรมไม่สามารถสร้างอินสแตนซ์ได้
- คุณต้องสืบทอดคลาสนามธรรมจากคลาสอื่นและจัดหาการใช้งานสำหรับเมธอดนามธรรมเพื่อใช้งาน
- คุณต้องจัดหาการนำไปใช้สำหรับเมธอดนามธรรมทั้งหมดในคลาสนามธรรมหากคุณสืบทอดมา
วิธีการเชิงนามธรรมคืออะไร?
วิธีนามธรรมมีเพียงการประกาศวิธีการและไม่มีการนำไปใช้ วิธีการที่เป็นนามธรรมสามารถแสดงได้โดยวิธีการที่ไม่มีเนื้อความของตัวเอง ต้องประกาศวิธีการนามธรรมเฉพาะในคลาสนามธรรมเท่านั้น
หากคุณต้องการให้คลาสมีเมธอด แต่การใช้งานจริงของเมธอดนั้นถูกกำหนดโดยคลาสย่อย ให้กำหนดเมธอดเป็นนามธรรมในคลาสพาเรนต์
ข้อดีของ Data Abstraction ในการเขียนโปรแกรมเชิงวัตถุ
- ในการเขียนโปรแกรมเชิงวัตถุ นามธรรมช่วยลดความซับซ้อนของการออกแบบโปรแกรมและกระบวนการของการใช้งานซอฟต์แวร์
- ข้อได้เปรียบที่สำคัญที่สุดของการนำ abstraction ไปใช้ในการเขียนโปรแกรม Java คือผู้ใช้สามารถจัดระเบียบคลาสตามความคล้ายคลึงกันได้อย่างง่ายดาย เช่น พี่น้อง ดังนั้นการสืบทอดข้อมูลและการย้ายข้อมูลจึงกลายเป็นเรื่องง่ายและเป็นไปได้
- มรดกเป็นไปได้ ตัวอย่างเช่น:
/* ชื่อไฟล์ : DemoAbstract.java */
DemoAbstract คลาสสาธารณะ {
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
/* ไม่สามารถเขียนสิ่งต่อไปนี้และเริ่มข้อผิดพลาดได้ */
พนักงาน e = พนักงานใหม่ (“Peter D.”, “Hartford, CT”, 35);
System.out.println(“\n ใช้การอ้างอิงพนักงานและโทร MailCheck–“);
e.mailCheck();
}
}
นี่แสดงข้อผิดพลาดต่อไปนี้:
Employee.java:46: พนักงานเป็นนามธรรม ไม่สามารถยกตัวอย่างได้
พนักงาน e = พนักงานใหม่ (“Peter D.”, “Hartford, CT”, 35);
^
1 ข้อผิดพลาด
ดังนั้นเราจึงใช้คลาสนามธรรมเป็น:
/* ชื่อไฟล์ : employee.java */
พนักงานระดับนามธรรมสาธารณะ {
สตริงส่วนตัว N;
เพิ่มสตริงส่วนตัว;
จำนวน int ส่วนตัว;
พนักงานสาธารณะ (String N, String Add, int Num) {
System.out.println("การสร้างพนักงาน");
this.name = N;
this.address = เพิ่ม;
this.number = จำนวน;
}
compute_pay สาธารณะคู่ () {
System.out.println("ภายในพนักงาน compute_pay");
ผลตอบแทน 0.0;
}
Mailcheck เป็นโมฆะสาธารณะ () {
System.out.println(“ส่งเช็คไปที่ ” + this.name + ” ” + this.address);
}
สตริงสาธารณะ toString () {
ส่งคืน N + ” ” + เพิ่ม + ” ” + N;
}
สตริงสาธารณะ getName() {
กลับ N;
}
สตริงสาธารณะ getAddress () {
กลับ เพิ่ม;
}
โมฆะสาธารณะ setAddress (String newAddress) {
เพิ่ม = ที่อยู่ใหม่;
}
int สาธารณะ getNumber() {
ส่งคืนจำนวน;
}
}
เราจะใช้คลาสนามธรรมหรือวิธีนามธรรมเมื่อใด
เมื่อเราพิจารณาตัวอย่างทั่วไปของ "รูปร่าง" เราอาจจินตนาการว่ามันถูกใช้โดยอ้างอิงถึงระบบการออกแบบโดยใช้คอมพิวเตอร์ช่วยหรือสำหรับการจำลองวิดีโอเกม ประเภทพื้นฐานที่อ้างถึงในที่นี้คือ "รูปร่าง" โดยทุกรูปร่างมีลักษณะสี ขนาด ฯลฯ เฉพาะ คลาสเฉพาะของรูปร่าง - วงกลม สี่เหลี่ยม สามเหลี่ยม ฯลฯ ได้มา (สืบทอด) จากสิ่งนี้ ซึ่งแต่ละประเภท อาจมีคุณสมบัติและพฤติกรรมพิเศษเฉพาะตัว ตัวอย่างเช่น รูปร่างบางอย่างสามารถสมมาตรได้ ในขณะที่รูปร่างอื่นๆ ไม่สมมาตร ทั้งความคล้ายคลึงและความแตกต่างที่ชัดเจนระหว่างรูปร่างนั้นรวมอยู่ในลำดับชั้นของประเภท
ดังนั้น รูปร่างสามารถเปรียบได้กับคลาสนามธรรม ในขณะที่รูปร่างประเภทต่าง ๆ สามารถแสดงเป็นคลาสที่เป็นรูปธรรมได้
นี่คือสถานการณ์จริงเพื่ออธิบายคลาสนามธรรม:
// โปรแกรม Java เพื่อสาธิต Abstraction
รูปร่างคลาสนามธรรม {
สีสตริง;
พื้นที่คู่นามธรรม ();
นามธรรมสาธารณะ String toString();
// คลาสนามธรรมสามารถมีตัวสร้างได้
รูปร่างสาธารณะ (สีสตริง)
{
System.out.println("ตัวสร้างรูปร่างที่เรียกว่า");
this.color = สี;
}
// นี่คือวิธีที่เป็นรูปธรรม
สตริงสาธารณะ getColour () { return color; }
}
คลาส Circle ขยายรูปร่าง {
ดับเบิ้ลอาร์;
วงกลมสาธารณะ (สีสตริง ดับเบิล (r)
{
// เรียกตัวสร้างรูปร่าง
ซุปเปอร์(สี);
System.out.println("ตัวสร้างวงกลมถูกเรียก");
this.r = r;
}
@แทนที่พื้นที่สองเท่า ()
{
ส่งคืน Math.PI * Math.pow(r, 2);
}
@Override สตริงสาธารณะ toString()
{
ส่งคืน “สีวงกลมคือ ” + super.getColor()
+ “และพื้นที่คือ : ” + พื้นที่ ();
}
}
คลาสสี่เหลี่ยมผืนผ้าขยายรูปร่าง {
ความยาวสองเท่า;
ความกว้างสองเท่า
สี่เหลี่ยมผืนผ้าสาธารณะ (สีสตริง, ความยาวสองเท่า,
ความกว้างสองเท่า)
{
// เรียกตัวสร้างรูปร่าง
ซุปเปอร์(สี);
System.out.println("ตัวสร้างสี่เหลี่ยมผืนผ้าเรียกว่า");
this.length = ความยาว;
this.width = ความกว้าง;
}
@ แทนที่พื้นที่สองเท่า () { ความยาวกลับ * ความกว้าง; }
@Override สตริงสาธารณะ toString()
{
ส่งคืน “สีสี่เหลี่ยมผืนผ้าคือ ” + super.getcolor()
+ “และพื้นที่คือ : ” + พื้นที่ ();
}
}
การทดสอบระดับสาธารณะ {
โมฆะคงที่สาธารณะ main(String[] args)
{
รูปร่าง s1 = วงกลมใหม่("สีแดง", 2.2);
รูปร่าง s2 = ใหม่ สี่เหลี่ยมผืนผ้า("สีเหลือง", 2, 4);
System.out.println(s1.toString());
System.out.println(s2.toString());
}
}
โค้ดส่วนนี้เป็นเวอร์ชันที่แก้ไขแล้วของโค้ด ที่ นี่
ข้อมูลโค้ดของโปรแกรมที่ใช้ data abstraction ใน Java:
// นามธรรมใน Java
คลาสนามธรรม ElecBill
{
//วิธีนามธรรม
นามธรรมลอย compBill ();
}
คลาส Comm ขยาย ElecBill
{
float compBill() {
กลับ 1.00*100;
}
}
คลาส ในประเทศ ขยาย ElecBill
{
float compBill() {
ผลตอบแทน 0.50*75;
}
}
บทสรุป
การแยกข้อมูลเป็นส่วนสำคัญของการเขียนโปรแกรมเชิงวัตถุ สำหรับภาษาต่างๆ เช่น Java, abstraction และแนวคิด OOP อื่นๆ เช่น การสืบทอด การห่อหุ้ม และพหุสัณฐาน มีบทบาทสำคัญในการเขียนโปรแกรมที่มีประสิทธิภาพ
หากคุณต้องการเรียนรู้ OOP ในเชิงลึกและรับทักษะการเขียนโปรแกรมชั้นหนึ่ง เราขอแนะนำให้เข้าร่วม การรับรอง PG ที่เชื่อมโยงกับงานของ upGrad ในวิศวกรรมซอฟต์แวร์ ซึ่งออกแบบมาเพื่อช่วยให้นักเรียนได้รับทักษะใน Java, OODAP, DSA, HTML5, CSS3 , JavaScript, MERN, AWS, SQL & NoSQL Databases, Spring Boot และอื่นๆ หลักสูตร 5 เดือนครอบคลุมความเชี่ยวชาญพิเศษสองอย่าง – MERN Stack Specialization และ Cloud-Native Specialization และให้การเข้าถึงเซสชันการให้คำปรึกษาด้านอาชีพ upGrad 360°
เรียนรู้ หลักสูตรการพัฒนาซอฟต์แวร์ ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม Executive PG โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
ความหลากหลายคืออะไร? แตกต่างจาก data abstraction อย่างไร?
ความหลากหลายเป็นลักษณะทั่วไป คล้ายกับนามธรรมข้อมูล แต่เกิดขึ้นที่รันไทม์ หากมีกลไกในการเข้าถึงคอลเล็กชันของประเภทอ็อบเจ็กต์ที่แตกต่างกันซึ่งแยกไม่ออกจากกัน พวกมันจะเป็นพหุสัณฐาน ดังนั้น แม้ว่าจะไม่เหมือนกัน วัตถุทั้งหมดภายในก็มีลักษณะและความรู้สึกเหมือนกัน เป้าหมายคือลดการเข้ารหัสลงอย่างมาก แทนที่จะเขียนการเรียงสับเปลี่ยนจำนวนมากทั้งหมดสำหรับแต่ละประเภท คุณสามารถเขียนโซลูชันสากลได้หนึ่งวิธี
Encapsulation และ Data Abstraction แตกต่างกันอย่างไร
ENCAPSULATION - 1. การห่อหุ้มซ่อนข้อมูล (ข้อมูล) ในขณะที่สิ่งที่เป็นนามธรรมซ่อนรายละเอียด (การซ่อนการใช้งาน) 2. Object-Oriented Programming ที่เป็นนามธรรมแก้ปัญหาในระดับการออกแบบ 3. เพื่อความปลอดภัย การห่อหุ้มหมายถึงการซ่อนข้อมูลภายในหรือกลไกการทำงานของวัตถุ บทคัดย่อ - 1. ในขณะที่การห่อหุ้มจะเชื่อมโยงข้อมูลและวิธีการที่ดำเนินการกับข้อมูลนั้น การแยกข้อมูลเกี่ยวข้องกับการเปิดเผยส่วนต่อประสานผู้ใช้ในขณะที่ปิดบังรายละเอียดการใช้งาน 2. ได้รับการแก้ไขในระดับการใช้งานผ่านการห่อหุ้ม 3. ใน Java data abstraction ช่วยให้คุณมีสมาธิกับสิ่งที่อ็อบเจ็กต์ข้อมูลต้องมี
อะไรคือคุณสมบัติที่แตกต่างระหว่างอินเทอร์เฟซและคลาสนามธรรม?
อินเทอร์เฟซ - 1. เฉพาะวิธีการที่เป็นนามธรรมเท่านั้นที่พบว่าตัวเองเป็นส่วนหนึ่งของอินเทอร์เฟซ 2. รองรับการสืบทอดหลายรายการ 3. ไม่สามารถนำเสนอการใช้งานคลาสนามธรรมได้ 4. อนุญาตเฉพาะวิธีการนามธรรมสาธารณะในอินเทอร์เฟซ 5. สามารถใช้ตัวแปรสุดท้ายแบบสแตติกสาธารณะได้เพียงตัวเดียวในอินเทอร์เฟซ คลาสนามธรรม - 1. นามธรรม เช่นเดียวกับวิธีการที่ไม่ใช่นามธรรม สามารถพบได้ในคลาสนามธรรม 2. ไม่รองรับการสืบทอดหลายรายการ 3. สามารถใช้อินเทอร์เฟซได้ 4. วิธีการสาธารณะที่มีการป้องกันและเป็นนามธรรมเป็นไปได้ในคลาสนามธรรม 5. ด้วยตัวระบุการเข้าถึงใดๆ คลาสนามธรรมสามารถมีตัวแปรสุดท้ายขั้นสุดท้าย แบบคงที่ หรือแบบคงที่ได้