Object-Oriented Programming

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา JAVA
Advertisements

Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Structure Programming
Object and classes.
Inheritance.
Week 6 ประกาศค่าตัวแปร.
PHP LANGUAGE.
05_3_Constructor.
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
ครั้งที่ 7 Composition.
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
C Programming Lecture no. 6: Function.
Selected Topics in IT (Java)
การสืบทอด (Inheritance)
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (3) (Class & Object)
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (4) (Class & Object)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
คลาสและวัตถุ (4) (Class & Object)
บทที่ 4 Method (1).
การสืบทอดคุณสมบัติ (Inheritance)
OOP (Object-Oriented Programming)
C# Programming Exceed Camp: Day 3.
Generalization & Specialization
Lecture 9 Class (คลาส) To do: Hand back assignments
Inheritance การสืบทอดคลาส
บทที่ 6 เมธอด.
ตัวแปรกับชนิดของข้อมูล
JAVA PROGRAMMING PART IV.
ฟังก์ชัน ง30212 การเขียนโปรแกรมด้วยภาษาคอมพิวเตอร์ ศูนย์คอมพิวเตอร์
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Method of Class อ.สุพจน์ สิงหัษฐิต
สำนักวิชาเทคโนโลยีสารสนเทศและการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา
Lec03 :: หลักการเชิงออปเจ็ค (Object Oriented Concept)
Lec05 :: การสืบทอด (inheritance)
Week 2 Variables.
Computer Programming for Engineers
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
การเขียนโปรแกรม ตอนที่ 1 (ต่อ)
บทที่ 3 Class and Object (2).
PHP: [8] การสร้างฟังก์ชั่นขึ้นใช้เอง (User-defined functions)
PHP การตรวจสอบเงื่อนไข.
Java Programming Java Structure and Datatype,Variable
Midterm outline Object-oriented programming Wattanapong suttapak, Software Engineering, school of Information communication Technology, university of phayao.
BCS 121 บท 5 การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
Polymorphism กนกวรรธน์ เซี่ยงเจ็น
สายอักขระ เขียนโปรแกรม Java เบื้องต้น.
Object Oriented Programming : OOP
Java Network Programming 1
การสืบทอด (inheritance)
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
Class. ทบทวน Object ประกอบด้วย ชื่อ Attributes -> คุณลักษณะ Methods -> การกระทำ ให้ลองเขียน Object โดยใช้รูปแบบดังนี้ ชื่อ Attributes Methods.
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
Object-Oriented Programming
คอนสตรัคเตอร์ (Constructor)
การกระทำทางคณิตศาสตร์
1 Functions กนกวรรธน์ เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร พะเยา.
chapter 2 - Construction and destruction - Overloading method
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
Chapter 6 Abstract Class and Interface
Computer Programming Asst. Prof. Dr. Choopan Rattanapoka
บทที่ 3 การสืบทอด (Inheritance)
Method and Encapsulation
ใบสำเนางานนำเสนอ:

Object-Oriented Programming การเขียนโปรแกรมเชิงวัตถุ ผู้สอน อ.วาทินี ดวงอ่อนนาม

บทที่ 8 การสืบทอด (Inheritance) ตอนที่ 2 การพ้องรูป Polymorphism และ Constructor

เนื้อหา Reference ของ class แม่สามารถอ้างถึง class ลูกได้ การพ้องรูป Polymorphism รู้จักคำว่า Overloading การ Overload Constructor และการใช้ this เรียกใช้ constructor ของ classแม่ ด้วย super() เรียกใช้ constructor ของ class ลูก(ตัวเอง ) ด้วย this()

note :argument และ parameter

การสืบทอด (Inheritance) (ต่อจากบทก่อนหน้า)

คลาสที่ใช้ศึกษา Animal + age : int + eat() + sleep() Dog + name: String + eat() Fish + sleep() + swim() extends extends

สร้าง class ต่าง ๆ

Reference ของ class แม่สามารถอ้างถึง class ลูกได้ ปกติเราจะสร้าง วัตถุโดย หมายเหตุ ตัวแปรinstance, reference,ตัวแปรObject ชื่อคลาส reference=new ชื่อคลาส(); เช่น Dog d=new Dog();

Reference ของ class แม่สามารถอ้างถึง class ลูกได้ แต่ในกรณีที่วัตถุอยู่ใน class ที่สืบทอด มาจาก class อื่นเราสามารถให้ reference ของclass แม่ อ้างถึงวัตถุใน class ลูกได้ ชื่อคลาสแม่ reference=new ชื่อคลาสลูก(); เช่น Animal a=new Dog(); Animal + age : int + eat() + sleep() Dog + name: String + eat()

Reference ของ class แม่สามารถอ้างถึง class ลูกได้ เราสามารถสั่งให้วัตถุใน class ลูกทำงานได้โดยผ่านทาง reference ของclass แม่ได้ Animal a=new Dog(); a.eat(); Animal + age : int + eat() + sleep() Dog + name: String + eat()

กรณี class ลูก override method

กรณี class ลูก override method Animal + age : int + eat() + sleep() Dog + name: String + eat()

กรณี class ลูก ไม่ได้ override method Animal + age : int + eat() + sleep() Fish +sleep() +swim()

กรณี class ลูก ไม่ได้ override method

กรณี class ลูก ไม่ได้ override method Animal + age : int + eat() + sleep() Fish +sleep() +swim()

หมายเหตุ เราสามารถใช้ reference คลาสแม่อ้างถึงวัตถุคลาสลูก ซึ่งจะเรียกได้เฉพาะเมธอดที่มีใน class แม่เท่านั้น เราเรียกเมธอด อื่นๆ จะทำให้ คอมไพล์ไม่ผ่าน

กรณี class แม่เรียกสิ่งที่ไม่มีใน class แม่ Animal + age : int + eat() + sleep() Fish +sleep() +swim()

กรณี class แม่เรียกสิ่งที่ไม่มีใน class แม่ Animal + age : int + eat() + sleep() Fish +sleep() +swim()

การพ้องรูป Polymorphism

การพ้องรูป Polymorphism คืออะไร คือ การทำให้สิ่งหนึ่งสามารถทำงานได้หลากหลายรูปแบบตามความต้องการที่เกิดขึ้นในขณะหนึ่ง ๆ เช่นการที่ Method ชื่อเดียวกันสามารถรับค่าที่ส่งมาแตกต่างกันได้หลายรูปแบบ

Polymorphism การพ้องรูป ยกตัวอย่าง Method void calculate(int x) { } void calculate(double y) { } หากมีผู้ใช้โปรแกรมส่งข้อมูลเข้ามาเป็นตัวเลขจำนวนเต็ม เราก็สามารถเรียกเมธอด calculate(int x) ให้ทำงาน หากผู้ใช้โปรแกรมส่งข้อมูลเลขทศนิยมเข้ามาเราก็สามารถเรียกคำนวณให้ละเอียดมากขึ้นโดยเรียกเมธอด calculate(double y) โดยไม่ต้องไปตั้งชื่อเมธอดใหม่ เพียงแค่ตั้งค่า อาร์กิวเมนต์ที่แตกต่างกัน มีศัพท์เรียกเฉพาะว่า เมธอดชื่อนั้นถูก “Overload”

Overloading & Polymorphism 2 คำนี้เกี่ยวข้องกันอย่างไร ? Overloading คือ การกำหนดให้ method หรือ constructor ที่มีชื่อเดียวกัน มี argument ที่แตกต่างกัน ทำให้ method หรือ constructor ดังกล่าวมีคุณสมบัติการพ้องรูป

กฎในการ Overload เมธอด ชื่อ method เหมือนกัน argument ของแต่ละ method ต้องแตกต่างกัน เพื่อจะได้สามารถแยกความแตกต่างระหว่างเมธอดเหล่านั้นได้ ค่าที่ส่งคืนกลับออกไปจาก method (return type) จะเหมือนหรือแตกต่างกันก็ได้

อย่าจำสับสันนะคะ กับคำว่า Override และ Overload คำเตือน อย่าจำสับสันนะคะ กับคำว่า Override และ Overload

สร้าง class “Employee” + name : String + salary : double +getDetails() +getDetails(name :String) :String +getDetails(s:double) : double

เรียก getDetails() ที่ได้ส่ง parameter

เรียก getDetails(“ชาติชาย”) parameter =“ชาติชาย”

เรียก getDetails(30000) , parameter=30000.0

Constructor (คอนสตรัคเตอร์)

Constructor (คอนสตรัคเตอร์) เป็นส่วนที่ประกอบด้วยคำสั่งที่จำเป็นสำหรับการกำหนดค่าเริ่มต้นให้กับ attribute ต่าง ๆ ของ Object โดย Constructor จะถูกเรียกให้ทำงานโดยอัตโนมัติ (default constructor) เมื่อเราสร้าง Object จาก class ด้วย New

Student + name : String + grade : double

หน้าตาของ constructor คล้ายเมธอดแต่ต่างกันตรงที่ ชื่อต้องเหมือนกันกับ class (แต่เมธอดชื่อต้องไม่เหมือนกับชื่อclass) ไม่มี return type

access modifier ของconstructor เหมือนกับ class

หากเราต้องการจะสร้าง constructor ขึ้นเอง constructor ที่สร้างขึ้นเองสามารถระบุให้มีหรือไม่มีargument ก็ได้ สร้างกี่อันก็ได้ ใน class หนึ่ง ๆ แต่ constructor แต่ละอันจะต้องมี argument ไม่เหมือนกัน สรุป มีชื่อเหมือนกันแต่ต่างกันที่ argument เราเรียก constructor เหล่านี้ว่า “overloaded constructor”

การ overload Constructor และการ ใช้ this

class Student this.แอตทริบิวต์ , this.เมธอด() 1 name ที่ input เข้ามา จะนำไปกำหนดค่าให้กับ this.name 2 this.name คือ name ที่เป็น attribute ของclass 2 1 this.แอตทริบิวต์ , this.เมธอด() เป็นการอ้างถึง แอตทริบิวต์ และเมธอด ของ class นี้

Default Constructor

เรียก Constructor โดย parameter=“Student A”

เรียก Constructor โดย parameter=“Student A”,4.00

Constructor ในclass แม่จะไม่ถูกถ่ายทอดให้ class ลูก class แม่จะถ่ายทอดแค่ attribute และ method เท่านั้น(ต้องประกาศเป็น public และ protected ด้วย)แต่ constructor ใน class แม่จะไม่ถูกถ่ายทอดไปยัง class ลูก สรุป constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้ แต่ class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้

สร้าง class A, class B ดังนี้

ทดสอบเรียก constructor ของ class แม่ กรณี ไม่มี parameter

ทดสอบเรียก constructor ของ class แม่ กรณี มี parameter

เมื่อ Default constructor เริ่มทำงาน นอกจาก default constructor จะทำการกำหนดค่าเริ่มต้นให้กับ attribute และ method แล้ว อีกสิ่งที่ default constructor ทำคือ เมื่อ default constructor ของ class ลูกทำงานจะไปเรียก default constructor ของบรรพบุรุษ ให้ทำงานด้วย

ทดสอบเรียก constructor ของ class ลูก กรณี ไม่มี parameter 1 2

ทดสอบเรียก constructor ของ class ลูก กรณี มี parameter=16 2

constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้

constructor ของ class แม่และ class ลูก เป็นส่วนที่แยกออกจากกันไม่สามารถสืบทอดให้กันได้

เรียกใช้ constructor โดยใช้ super() ,this() class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() และเรียกใช้ constructor ของ class ตัวเองโดยใช้ this() โดยมีเงื่อนไขว่า เมื่อใช้ super() และ this() ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor และparameter ที่ใช้ก็ต้องมีใน constructor ของ class นั้นๆ ด้วย เช่น super(5) class A (class แม่) ต้องมี A(int x){} this(5.0) class B (class ลูก) ต้องมี B(double x){} ไม่เช่นนั้นจะคอมไพล์ไม่ผ่าน

class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() ให้แก้ไขเพิ่มเติม class B ดังนี้ 2 1 3

class ลูกสามารถเรียกใช้ constructor ของ class แม่ได้โดย super() ให้แก้ไขเพิ่มเติม class B ดังนี้ 1 2 3

class ลูกสามารถเรียกใช้ constructor ของ class ลูก(ตัวเอง)ได้โดย this() ให้แก้ไขเพิ่มเติม class B ดังนี้

class ลูกสามารถเรียกใช้ constructor ของ class ลูก(ตัวเอง)ได้โดย this() ให้แก้ไขเพิ่มเติม class B ดังนี้ 1 2 3 4

จากข้อมูล เงื่อนไขการใช้ super() และ this() ต้องเรียกคำสั่ง super() ,this() นี้ที่บรรทัดแรกภายใน constructor และparameter ที่ใช้ก็ต้องมีใน constructor ของ class นั้นๆ ด้วย เช่น super(5) class A (class แม่) ต้องมี A(int x){} this(5.0) class B (class ลูก) ต้องมี B(double x){} ไม่เช่นนั้นจะคอมไพล์ไม่ผ่าน

ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor

ต้องเรียกคำสั่งนี้ที่บรรทัดแรกภายใน constructor

เรียกใช้ constructor ที่ไม่มีอยู่จริง จะเห็นว่าไม่มี B(String s){}

สรุป หลักการพื้นฐานของ object oriented Encapsulation และ Information Hiding การห่อหุ้ม และ การซ่อนรายละเอียด Inheritance การสืบทอด และ (Reusable) การนำวัตถุมาใช้ใหม่ Polymorphism การพ้องรูป

The End.