Upload
-
View
300
Download
1
Embed Size (px)
Citation preview
CPE4235 การวเคราะหและโปรแกรมเชงวตถ
จตกร พทกษเมธากลJava Web Developer @Geniustree Co.,Ltd“i am programmer.”
การเดนทางหมนล ตองเรมตนทกาวแรกเสมอ
CPE4235
ทบทวน
CPE4235
• Data type• Primitive (byte, short, int, long, …) • Reference
• String (pool, immutable)• Array
• if else, switch case• ++variable, variable++• for, while, do while• break, continue
CPE4235
OOP(Object Oriented Programming)การเขยนโปรแกรมเชงวตถ
CPE4235
3
เนอหา
• Class• Object• Package• Interface• Abstract class
CPE4235
interface
class
package
CPE4235
OOP คออะไร ?
CPE4235
OOP (Object Oriented Programming)
เปนวธการเขยนโปรแกรม โดยมององคประกอบทงหมดของโปรแกรมเปนเชงวตถ (object)
CPE4235
object
object
object
objectobject
CPE4235
ไมวาจะเปนโครงสรางขอมล การจดเกบการประมวลผล การตดตอสอสารการแลกเปลยน พดคยกนภายในโปรแกรมจะเปนเชงวตถทงหมด
“Object คยกบ Object”
CPE4235
นแหละ OOP concept!
CPE4235
Java เขยนโปรแกรมกนแบบนแหละ คยกนดวย Object
CPE4235
หวดด Object 2
หวดด Object 1
ปใหมนไปเทยวไหนหรอ Object 1
เราวาเราจะขนเหนออะ Object2
นายจะไปกะเราอะปาวววววว
Object 1 Object 2
CPE4235
วาวววว
ปาว
ทเราบอกจะขนเหนออะ
Object 1 Object 2
นายจะไปเชยงใหมหรอ Object 1
เหนอสกลนคร Object2
CPE4235
......
Object 1 Object 2
สา.................
“บงกาฬ”
CPE4235
แลว นกศกษาละ ไปเทยวไหนกน?ปใหมน
CPE4235
ตอมาคอคณสมบตหรอหลกเกณฑทจะน าไปสการเปน OOP
มอย 3 อยางดวยกนคอ1. การหอหม (Encapsulation)2. การสบทอด (Inheritance) และ3. การพองรปหรอการมไดหลากหลายรปแบบ (Polymorphism)
CPE4235
แตกอนทจะอธบายทง 3 องคประกอบ เรามาท าความรจกกบพนฐานอนๆ กนกอน
กอนทจะไป OOP
CPE4235
การเขยนโปรแกรมดวยภาษา javacode หรอ logic ตางๆ จะถกเขยนไวในสงทเรยกวา
“class”
CPE4235
class
CPE4235
แลวตกลง class มนคออะไร ?
CPE4235
เหนคนเรยน OOP ใครๆ กพดถงแต “class” กน
CPE4235
เราเขยนกนมาแลว
public class HelloWorld {
// code อยในน
}
class { block }
CPE4235
เราเขยนกนมาแลว
public class HelloWorld {
public static void main (String [] args) {System.out.println(“Hello World.”);
}}
CPE4235
class
• คอสวนทใชในการเขยน code• คอตนแบบ แมแบบ แมพมพ (Blueprint) ทจะน าไปสราง
เปน object• คอสวนทก าหนดคณสมบต (Attribute) และพฤตกรรม
(Behavior) ของ object
CPE4235
class คอสวนทใชในการเขยน code
CPE4235
public class EmailValidator {
public void validate() {//logic
}}
CPE4235
public class EmailValidator {
public void validate() {//logic
}} CODE
CPE4235
class คอตนแบบ แมแบบ แมพมพ (Blueprint) ทจะน าไปสรางเปน object
CPE4235
CPE4235
class คอคอสวนทก าหนดคณสมบต (Attribute) และพฤตกรรม (Behavior) ของ object
CPE4235
Behavior
class
Attribute
CPE4235
ถาเราเขยน class นกฮก
เรากก าหนดคณสมบต หรอพฤตกรรมของนกฮกลงไปใน class
วานกฮก มลกษณะอยางไรมพฤตกรรมเปนอยางไร
CPE4235
ถาเราเขยน class pokemon
เรากก าหนดคณสมบต หรอพฤตกรรมของ pokemon ลงไปใน class
วา pokemon มลกษณะอยางไรมพฤตกรรมเปนอยางไร
CPE4235 พกะจ (Class)
คณสมบต (Attribute)เปนโปเกมอนจ าพวกหน มรปรางเตย เลก หนากลม เปนโปเกมอนรปแบบไฟฟา
พฤตกรรม (Behavior)ปลอยพลงกระแสไฟฟาทมความรนแรงหลากหลายผานทางแกมสแดงและหาง
CPE4235
ไวยากรณ (Syntax) ในการประกาศ class ของภาษา java
class ClassName {
//code
}
CPE4235
ไวยากรณ (Syntax) ในการประกาศ class ของภาษา java
class ClassName {
//code
}
Scope
CPE4235
ไวยากรณ (Syntax) ในการประกาศ class ของภาษา java
class ClassName {
String attribute; void behavior() { }
}
CPE4235
ไวยากรณ (Syntax) ในการประกาศ class ของภาษา java
class ClassName {
String attribute; //data type เปนอะไรกไดvoid behavior() { } //อาจม return type และ parameter
}
CPE4235
ไวยากรณ (Syntax) ในการประกาศ class ของภาษา java
class ClassName {
int attribute; String behavior(int x){ return x; }
}
CPE4235
• คณสมบต (Attribute) คอ field ขอมล• พฤตกรรม (Behavior) คอ method หรอ function การท างาน
CPE4235
วตถ (Object)
CPE4235
Object
• คอสงทถกสราง/หลอออกมาจาก Class• คอสวนทถกถายทอดคณสมบตหรอพฤตกรรมของ Class
CPE4235
Class เปนแบบไหน Object กเปนแบบนน
เชนเรานยาม class สงโต ไวยงไง Object ทถกสรางมาจาก class สงโต กเปนแบบนน
CPE4235 Class สงโต
CPE4235 มนควรทจะเปนแบบน
CPE4235 ไมใชแบบน
CPE4235
class คอการประกาศหรอนยาม
object คอสงทถกสรางมาจากสงทนยามไว
“ตองเหมอนกนเดะ”
CPE4235
ไวยากรณ (Syntax) ในการสราง object จาก class
class Lion {
}
Lion simba = new Lion();
CPE4235
เราใช keyword “new”ในการสรางหรอหลอ object มาจาก class นนๆ
Lion simba = new Lion();
CPE4235
บางครงเรากเรยก object ทถกสรางมาจาก class วา“instance”
Lion simba = new Lion();
CPE4235
ทก object ทถกสรางจากค าสง new จะอสระจากกน คอจองพนทหนวยความจ าคนละต าแหนง ไมมความเกยวของกน
object
object
object
CPE4235
Lion simba = new Lion();
object
simba
Memory
CPE4235
Lion simba = new Lion();simba = new Lion();
object
simba
Memory
object
CPE4235
class หนงๆ สามารถสราง instance ขนมาก instance กไดขนอย กบ Memory ของเครองและการก าหนด Heap (Memory) วาก าหนดไวเทาไหร
CPE4235
Heap
CPE4235
Heap
คอพนทหนวยความจ า (Memory) ท JVM ใชส าหรบเกบคาทเปน Dynamic เชน
instance หรอ ตวแปรตางๆ ทถกจองในระหวางทโปรแกรมก าลงท างาน จะถกน ามาเกบไวใน Memory ทเรยกวา Heap
CPE4235
Heap
object
objectobject
object
CPE4235
Heap มโอกาสทจะเตม ขนอย กบการ config JVM ของเรา วาจะใหโปรแกรมเราจะใช Memory สงสดเทาไหร
มฉะนน จะเกด OutOfMemoryError
CPE4235
เมอ Heap ใกลเตม หรอในขณะนน instance ทอยใน Heap ไมไดถกใชงาน จะเกดการเกบกวาดคนหนวยความจ าสระบบ เรยกวา Garbage Collection
CPE4235
การเกบกวาดคนหนวยความจ า (Garbage Collection)
CPE4235
เมอเราท าการสราง instance ดวยค าสง newจะเกดการจองพนทหนวยความจ าขนมา 1 ชด
Object obj = new Object( );
objobject
CPE4235
Object ทสรางขนมา จะไมมทางสญหาย หรอถกลบออกจากหนวยความจ า ถายงม ตวแปรใดตวแปรหนงอางถง Object (หนวยความจ าต าแหนง) นนอย
Object obj = new Object( );
objobject
CPE4235
แตถาเปนแบบน
Object obj = new Object( );obj = new Object( );obj = new Object( );
objobject
object
object
CPE4235
แตถาเปนแบบน
Object obj = new Object( );obj = new Object( );obj = new Object( );
objobject
object
object
Garbage
CPE4235
คอจะม Garbage Collector มาคอยท าหนาท check อยตลอดเวลา วา memory ต าแหนงไหนทไมถก reference ถงมนกถกจะ Garbage ทงทนท
object
variable
Memory
object
garbage
CPE4235
นแหละ Garbage Collection
คอจะม Garbage Collection คอยท าการตรวจสอบหนวยความจ าอยตลอดเวลา วาหนวยความจ าต าแหนงใด ทไมถกอางถง
มนจะคนหนวยความจ าต าแหนงนสระบบทนท
CPE4235
คณสมบต (Attribute)
CPE4235
คณสมบต (Attribute) หรอ Field ขอมล
คอขอมลทถกเกบไวใน class หรอ objectเปนสงทระบวา object นนมลกษณะเปนอยางไร
CPE4235
เชนสเขยว, สแดง, ขนาด 20 กรม, เปนแพทยอายรกรรม, อาย 14 ป,เพศชาย, บตรหมดอายวนท 31/12/2014 เปนตน
อนนแหละ ทเขาเรยกวาคณสมบตของ objectหรอขอมลของ object
CPE4235
public class User{private String username;private String password;private String email;private String image;private String url;
}
การก าหนดคณลกษณะของ object
CPE4235
เมธอท (Method : พฤตกรรม)
CPE4235
Method
ถามองในมมมองภาษา functional programming มนกคอ function นนเอง
ถามองในมมมองของ OOP มนกคอ function เหมอนกน แตมนเปน function ของ class หรอ object
CPE4235
Method ตางจาก function ธรรมดาๆ อยางไร
การเขยน/เรยกใชงาน Method ใดๆ จะตองเขยน/เรยกผาน class / object เทานนเราไมสามารถเรยก / เขยน method โดยปราศจาก class / object ได
CPE4235
public void run( ){
}
run( );
เขยนแบบนไมได
CPE4235
public class Car{public void run( ){
}}
Car car = new Car();car.run( );
ตองเขยนแบบน
CPE4235
public class Car{public void run( ){}
public void start( ){run( );
}}
แตเราสามารถเรยกแบบนได
CPE4235
toString
CPE4235
toString เปน default method ของ ทก objectถาเราไมเรยก method ใดๆ ของ objectmethod toString จะถกเรยกแทนเสมอ เชน
public class Address {public String toString(){ return “my home”; }
} Address addr = new Address();System.out.println(addr); //my home
CPE4235
this
CPE4235
this เปน keyword ในภาษา java
ใชส าหรบอางถงสมาชกภายใน object นนๆ
Object นะ ไมใช class
CPE4235
public class Message {private String msg;public Message(String msg){
this.msg = msg;}public String toString(){
return this.msg;}
}
CPE4235
Message obj1 = new Message(“Hello”);System.out.println(obj1); //Hello
Message obj2 = new Message(“World”);System.out.println(obj2); //World
CPE4235
Constructor
CPE4235
Constructor คอ Method ทมชอเหมอน class
ซงจะท างานตอนทท าการสราง instance หรอ new Object() เสมอ
CPE4235
1 class สามารถม constructor ไดหลาย constructor
ในขณะทท าการ new Object() สามารถม constructor ถกเรยกไดเพยง 1 constructor เทานน
CPE4235
public class User{private String username;public User( ){
this(null);}
public User(String username){this.username = username;
}}
CPE4235
User user1 = new User();
User user2 = new User(“admin”);
CPE4235
interface
CPE4235
Interface
เปนขอก าหนดหรอ specification ของ class วาclass นนจะตองมพฤตกรรมอะไรบาง
CPE4235
public interface SearchService {
String MESSAGE_PATTERN = “%XXX%”;
Item searchByName(String name);
}
CPE4235
คณสมบต หรอ attribute ของ interface จะเปน public static final …. เสมอ
จากตวอยาง เมอก จรงๆ แลว
MESSAGE_PATTERN เปน
public static final String MESSAGE_PATTERN = “%XXX%”;
CPE4235
method ของ interface จะเปน abstract method
คอไมมพฤตกรรม (ไมม { … }) ทก method
……
Item searchByName(String name);
……
CPE4235
Implementation
คอ class ทท าตาม spec interface ทถกก าหนดไว
ใช keyword “implements” ในการท าตาม spec นนๆ
CPE4235
spec หรอ พฤตกรรมทงหมด ทถกประกาศไวใน interface จะตองมใน implementation ท implements interface นนๆ มา
public class SearchServiceImpl implements SearchService {
public item searchByName(String name){
}}
CPE4235
interface ประกาศไวก method
implementation จะตองม method ครบตามทประกาศไวใน interface เสมอ
เกนได แตหามขาด
CPE4235
Abstract class
CPE4235
Abstract class
เปนกง class กง interface คอมพฤตกรรมครงหนงเปน classอกครงเหมอน interface
CPE4235
โดยปกตจะใชเปน Template class / method คอเปน class ส าเรจรป แลวให class อน extends เพอสบทอดพฤตกรรมบางอยาง
แตกมบาง method (พฤตกรรม) ทตองการให implement เอง
CPE4235
public abstract AbstractReportCtrl {
protected abstract String getReportFileName();
public void exportReport(){…
}}
CPE4235
public Report1Ctrl extends AbstractReportCtrl {
protected String getReportFileName(){return “report1.jasper”;
}}
CPE4235
public Report2Ctrl extends AbstractReportCtrl {
protected String getReportFileName(){return “report2.jasper”;
}}
CPE4235
hashCode() and equals()
CPE4235
hashCode()
เปน method ทท าหนาทในการ hash คาสมาชก (attribute) ของ instance ดวย has algorithm เพอใหไดคาทแตกตางกนออกมา
เพอใหสามารถเขาถง (access) ขอมล / คนหา instance นนๆ ไดเรวขน แทนทจะตองคาหาขอมลตงแต 1 – N
เชนการคนหาขอมลใน HashMap หรอ HashTable
CPE4235
equals()
equals เปน method ทใชในการเปรยบเทยบวา object 2 object เทากนหรอไม
CPE4235
object ไมสามารถใช == ได เพราะ object เปน Reference Data Type
object 2 objects ถกจองบนพนทหนวยความจ าทแตกตางกนจงไมมทางเทากน (==)
การทเราจะ check วาทง 2 object เทากนหรอไม เราจะตองใช method equals()
CPE4235
package
CPE4235
package com.omsalung.incom;
public class IncomItem {
}
CPE4235
package
คอสวนทเอาไวจดหมวดหมของ classทเราคดวาควรอยในหมวดหมเดยวกน
CPE4235
ถาเรามองในมมมอง physicalpackage กคอ folder เชน com/omsalung/service/impl
แตพอเรามาเขยนเปนภาษา java จะเปนcom.omsalung.service.impl
CPE4235
ปกต การตงชอ package มกจะเปนการตงชอยอนกลบของชอเวบไซต ชอองกรค หรอชอระบบทเราก าลงท าการพฒนนา เชน
https://developer.facebook.com จะตงชอ package เปนcom.facebook.developer
http://na5cent.blotspot.com จะตงชอ pagkage เปนcom.blogspot.na5cent
CPE4235
โดยทวไป จะใชตวพมพเลกทงหมด
CPE4235
import
CPE4235
package com.omsalung.incom;import org.springframework.util.StringUtils;
public class IncomItem {
}
CPE4235
import
ความหมายตรงตว หมายถง “น าเขา”น าเขาสมาชกอนๆ ของ package ทถกเขยนไวแลว
CPE4235
รปแบบการ import
• Package Member• Entire Package• Static import
CPE4235
Package Member
คอการ import สมาชกภายใน package ทละตวๆ เชน
import java.io.File;import java.util.ArrayList;import java.util.Date;import java.util.List;import javax.annotation.PostConstruct;
CPE4235
Entire Package
คอการ import สมาชกทงหมดภายใน package นน จะใชสญลกษณ * เชน
import java.io.File;import java.util.*;import javax.annotation.PostConstruct;
CPE4235
Static import
คอการ import static method ของ class นนๆท าใหเราสามารถเรยกใชงาน static method ไดเลยโดยไมตองเรยกผาน class
import static org.springframework.StringUtils.hasText;
if(StringUtils.hasText(str)) { } if(hasText(str)) { }
CPE4235
CPE4235
CPE4235
static
CPE4235
static
เปน keyword หนงใน ภาษา java ทใชส าหรบระบถงสงทใช keyword staticวาเปนสมาชกของ class
class นะไมใช objectตองแยกใหออก
CPE4235
ตองแยกใหออก ระหวาง class กบ object
class = แมพมพobject = รปหลอ ทมาจากแมพมพ
CPE4235
ถาค าวา static หมายถงสงทบงบอกวาเปนสมาชก classหรอสมาชกของแมพมพ
แนนอน มนตองมตวเดยว (แมพมพเดยว)นนคอ ทก object reference ถง static ตวเดยวกน
CPE4235
class
static
CPE4235
class
static
object
objectobject
CPE4235
ถา static มการเปลยนแปลง
object ทก object กจะไดคา static เดยวกนทงหมด
CPE4235
static สามารถเปนไดทง variable และ method
CPE4235
public class Item {public static int sequence = 1;public static void increaseSequence(){
sequence = sequence + 1;} public void printSequence(){
System.out.println(sequence);}
}
CPE4235
Item item1 = new Item();Item item2 = new Item();Item item3 = new Item();
item1. printSequence(); //1item2. printSequence(); //1Item. increaseSequence(); item3. printSequence(); //2item1. printSequence(); //2item2. printSequence(); //2
CPE4235
จงท าบางสงในวนน ทคณจะตองขอบคณตวเอง
ในวนขางหนา
CPE4235
คณสมบตของ OOP
• การหอหม (Encapsulation)• การสบทอด (Inheritance)• การมไดหลากหลายรปแบบ (Polymorphism)
CPE4235
Encapsulation
เปนวธการก าหนดการเขาถงขอมลภายใน class หรอ objectวาจะให class ภายนอก สามารถเขาถงสงทอยภายใน class หรอ object ไดมากนอยเพยงใด
CPE4235
ซงประกอบไปดวย Access Modifier 3 ตว คอ
• public• private• protected
CPE4235
public
อนญาตให class ทก class method ทก methodไมวาจะอยทใดกตาม
สามารถ access สงทถกประกาศ (define) เปน public ไดทงหมด
CPE4235
class X
CPE4235
class X
class A
class B
class C
class Eclass F
class D
CPE4235
private
อนญาตใหเฉพาะสมาชกทอยภายใน class หรอ object นนๆ สามารถ access ไดเทานน
ขางนอก class หรอ object ขางนอกaccess สงๆ นนไมไดเดดขาด
CPE4235
class X
CPE4235
class X
class A
class B
class C
class Eclass F
class D
ภายนอก access ไมได
CPE4235
protected
อนญาตใหเฉพาะสมาชกภายใน class หรอclass ทสบทอดคณสมบตจาก class นน (class ลก) หรอclass ทอยใน package เดยวกน
สามารถ access สงทอยภายในได
CPE4235
class X
CPE4235
class X
class A
class B
class C
class Eclass F
class D
ภายนอก access ไมไดpackage เดยวกน หรอ extends มา access ได
class Z
packageextends
CPE4235
Inheritance
คอการสบทอดคณสมบต และพฤตกรรมของ classเรยกอกอยางหนงวาการ extends
CPE4235
สงมชวต
สตว มนษย
เสอ
เสอชตาห เสอโครง
สบทอด
สบทอด
สบทอด สบทอด
สบทอด
CPE4235
นยามของเสอ หรอ class เสอคออะไร
• ล าตวสเหลอง ลายพาดด า• มหนวด คลายแมว แตตวใหญกวา• เปนสตวกนเนอ
• ดราย• ลาเหยอ• ค าราม
CPE4235
สบทอด สบทอด
สบทอด
เสอโครง เสอดาว เสอชตาห
เสอ
CPE4235
Code
class Tiger {
public void roar(){ //ค ารามSystem.out.println(“Tiger is roaring.”);
}
}
CPE4235
Code
class Cheetah extends Tiger{
}
Tiger tiger = new Cheetah();tiger.roar(); // Tiger is roaring.
CPE4235
Code
class Bengal extends Tiger{
}
Tiger tiger = new Bengal();tiger.roar(); // Tiger is roaring.
CPE4235
Inheritance
มหลกเกณฑดงตอไปน 1. class หนงๆ สามารถสบทอดพฤตกรรมจาก class ใดๆ ได
เพยง 1 class เทานน2. การสบทอดใช keyword extends ซงจะตองเปน class
เทานน (รวม abstract class) ไมสามารถสบทอด interface ได
3. class ทท าการสบทอด เราเรยกวาคลาสลก (child class)สวน class ทถกสบทอดเราเรยกวาคลาสแม (parent class)
CPE4235
4. ถาเราไมตองการให class อนๆ ท าการสบทอด class นนไดใหเราใช keyword final ไวกอน keyword class
public final class MyClass {//ไมม class ไหนสามารถสบทอด class นได
}
CPE4235
5. class ลกสามารถเรยกใชงาน สมาชก (attribute หรอ method) public หรอ protected ใดๆ ของ class แมได โดยการใช keyword superclass Tiger{
protected String name = "tiger";}public class Bengal extends Tiger{
public void roar(){System.out.println(super.name); //tiger
}}
CPE4235
class A {A(){ System.out.println(“class A”); }
}class B extends A {
B(){ System.out.println(“class B”); }}class C extends B {
C(){ System.out.println(“class C”); }}C object = new C();
CPE4235
แสดงผลค าวา อะไรบาง?
CPE4235
ค าตอบ คอ แสดงผลวา
class Aclass Bclass C
ท าไม?
CPE4235
เพราะกอนทจะท าการเรยก constructor ของ class ลก
มนจะเรยก constructor ของ class แม กอนเสมออออออ
CPE4235
Polymorphism (การพองรป หรอการมไดหลากหลายรปแบบ)
เปนเทคนคการเขยน code ครงเดยว แลวสามารถรองรบพฤตกรรมการท างาน ไดอยางหลากหลาย
เปนเรองทโปรแกรมเมอรมอใหมสบสนทสด
CPE4235
สมมต ผมตองการใหพวกคณเขยนโปรแกรมวาดรปทรงใหผมหนอย โดยมหนาจอวาด แลวกป มเลอกวาจะวาดรปอะไร
CPE4235
รปแรกทผมจะใหพวกคณวาดใหคอ รปวงกลม
CPE4235
circle
CPE4235
สงทพวกคณจะท าคออะไร?
แนนอน เขยน class วาดรปวงกลมขนมาจากนน กวาด หรอเรยกใชมนซะ!
CPE4235
public class Circle {
public void draw() {System.out.println(“circle”);
}}
Circle circle = new Circle();circle.draw();
CPE4235
ตอมา ผมตองการใหพวกคณวาดรปสเหลยมเพมเขาไปอก
สงทตองท ากคอ เขยน class วาดรปสเหลยมขนมา แลวกวาดมนซะ
เหมอนเดม
CPE4235
circle
Rectangle
CPE4235
public class Rectangle {
public void draw() {System.out.println(“rectangle”);
}}
CPE4235
แตตอนน เราม 2 ปม เพราะฉะนน เราตอง
if else เลอกปมใดปมหนง
CPE4235
if(button.clicked == 1){Circle circle = new Circle();circle.draw();
} else {Rectangle rec = new Rectangle();rec.draw();
}
CPE4235
ตอมา ผมโลภมาก อยากใหคณวาดใหอก 5 รปคอ
• รปดาว • รปสามเหลยม • รปหกเหลยม • รปแปดเหลยม และ• รปวงร
CPE4235
circle
Rectangle
...
...
...
...
CPE4235
คณกจะท าเหมอนเดม คอเพม class วาดรปตางๆแลวก if else 6 7 อน
CPE4235
ค าถาม
แลวถามนมการเพมรปทรงตางๆ เขามาเรอยๆ ละ
CPE4235
แนนอน
การเขยนโปรแกรม แบบน เรมจะไม work ละ
เพราะฉะนน เรามาใชหลก Polymorphism กนดกวา
CPE4235
สราง abstract class รปทรง (Shape) ขนมา
public abstract class Shape {
public abstract void draw();}
CPE4235
ให class อน extends Shape
public class Circle extends Shape {
@Overridepublic void draw(){
System.out.print(“circle”);}
}
CPE4235
ให class อน extends Shape
public class Rectangle extends Shape {
@Overridepublic void draw(){
System.out.print(“rectangle”);}
}
CPE4235
เขยน code ส าหรบวาด Shape (ยงไมรวา Shape อะไร)
public class Drawing {
public void draw(Shape shape){shape.draw();
}}
CPE4235
circle
Rectangle
...
...
...
...
CPE4235
circle
Rectangle
...
...
...
...
CPE4235
จะวาดรปอะไร กโยน instance ของ class นนเขาไปใน method draw ของ class Drawing เลย ดงน
Drawing dw = new Drawing();dw.draw(new Circle());dw.draw(new Rectangle());dw.draw(new Eclipse());
CPE4235
method draw ของ class Drawing ท าหนาทแควาดแตมนไมรวาจะใหวาดอะไร
เราจะใหมนวาดอะไร เรากสงมนเขาไปจากขางนอกผาน ซง class นนตอง extends Shape
public void draw (Shape shape) { }
CPE4235
นแหละ Polymorphismmethod draw รองรบรปทรงไดอยางหลากหลายdraw รองรบ class อะไรกได ท extends class Shape
public void draw (Shape shape) { }
CPE4235
จบวนนไมมการบานใหพกผอนปใหม