แก้ไขcmdรับค่าอักษรไทย
วันพฤหัสบดีที่ 12 พฤศจิกายน พ.ศ. 2558
วันอังคารที่ 10 พฤศจิกายน พ.ศ. 2558
Polymorphism
Polymorphism
โพลิมอร์ฟิซึม (Polymorphism)
ประโยชน์ สำคัญของกลไกลโพลิมอร์ฟิซึม คือการนำกลับมาใช้ใหม่ (reuse)
โปรแกรมที่เราออกแบบไว้ ในปัจจุบันสามารถรองรับคลาสใหม่ๆได้
ที่จะถูกเขียนเพิ่มในอานาคต ได้ ทั้งนี้เพราะวัตถุในคลาสใหม่ๆ
จะถูกใช้งานผ่านทางเรพเฟอร์เรนซ์ของคลาสพื้นฐาน
ส.นอน () สามารถตีความหมายได้หลายแบบ
ขึ้นกับวัตถุที่ ส อ้างถึง
โปรแกรม แสดง
เมธอด นอน ()
สัตว์ ส
;
ส = new สัตว์ ();
ส.นอน();
ส = new ลิง ();
ส.นอน();
ส = new ปลา ();
ส.นอน();
สอนโปรแกรมข้างบน คำสั่ง
ส.นอน() แบบเดียวนั้นทำงานที่เมธอดที่แตกต่างกัน
คุณสมบัตินี้เป็นคุณสมบัติของภาษาโปรแกรมเชิงวัตถุที่มีชื่อว่า โพลิมอร์ฟิซึม (Polymorphism) ซึ้งโพลิมอร์ฟิซึม
จะสนับสนุนการ การนำกลับมาใช้ใหม่ (eruse)
เช่น
ถ้าเราได้เขียนโปรแกรมที่ให้อาหารสัตว์ โปรแกรมของเราย่อยใช้ได้กับแมว ปลา และลิง
และถ้ามีคน สร้างคลาสอีกัวน่าขึ้นมาใหม่
โปรแกรมที่เราขียนก็สามารถใช้ได้กับคลาส อีกัวน่าได้เช่นกัน โดยมีข้อแม้ว่า แต่คลาสอีกัวน่า จะต้องสืบทอดคลาสสัตว์ หรือ
คลาสที่เป็นลูกของควาสสัตว์
Class คนเลี้ยงสัตว์
ให้อาหาร (สัตว์ ) {
ส.กิน();
}
}
|
คนเลี้ยงสัตว์
ค = new คนเลี้ยงสัตว์();
ลิง ล = new ลิง();
อีกัวน่า อ = new อีกัวน่า();
ค.
ให้อาหาร(ล) ;
ค.ให้อาหาร
(อ) ;
|
ภาพ การสืบทอดคลาสสัตว์ที่เป็นคลาสลูก
ตัวอย่าง ที่1
1 1. คลาสภาพร่างเขียนไว้
Public class Shape{
Public double getArea(){rrturn 0 ;}
}
นอกจากนี้แล้วภาพร่างยังมีสีตามที่ประกาศไว้ใน อีนัม color
public class
Shape{
private
Color color;
public Shape(){
Color
= Color.Red;
}
public void
setColor(Color c) {
Color
= c ;
}
public
Color getColor(){
Return
color;
}
public double getColorArea(){
Return
0 ;
}
}
1 2. ทดสอบคลาสภาพร่าง
คลาส TestShape
ใช้ทดสอบการทำงานของคลาส Shape
โดยจะเรียกใช้ทุกเมธอด ในคลาส Shape ในการทดสอบมีขั้นตอนคือ
1.1
สร้างภาพร่าง
พิมพ์สี และพิมพ์พื้นที่
1.2
สร้างภาพร่างอีกภาพ เปลี่ยนเป็นสีน้ำเงิน พิมพ์สี
และพิมพ์พื้นที่
public class TestShape
public static void
main (String[]args){
Shape s1
= new
Shape {
System.out.println(s1.getColor());
System.out.println(s1.getArea());
Shape s2 =
new Shape();
S2.setColor(Color.Blue);
System.out.println(s2.getColor());
System.out.println(s2.getArea());
}
}
ผลการรันโปรแกรมคือ
Red
0.0
Blue
0.0
ตัวอย่าง 2 TestEmployee.java
package ems.test;
import ems.model.Employee;
import ems.model.Manager;
public class TestEmployee {
public static void main(String[] args) {
Employee[] empList = new Employee[10];
Employee emp1 = new Employee();
emp1.setId(1);
emp1.setName("James");
emp1.setSalary(15000);
emp1.getAddress().setStreet("Rama
3");
emp1.getAddress().setCity("Bangkok");
empList[0] = emp1;
Employee emp2 = new Employee();
emp2.setId(2);
emp2.setName("Ann");
emp2.setSalary(25000);
emp2.getAddress().setStreet("Silom");
emp2.getAddress().setCity("Bangkok");
empList[1] = emp2;
Manager emp3 = new Manager();
emp3.setId(3);
emp3.setName("Peter");
emp3.setSalary(40000);
emp3.getAddress().setStreet("Bangrak");
emp3.getAddress().setCity("Bangkok");
emp3.setParkingNo("4C-19");
empList[2] = emp3;
// because empList will hold address of Employee
// And Manager is-an Employee. Therefore it's fine
for (int i = 0;
i < empList.length; i++) {
if (empList[i] != null) {
System.out.println(empList[i].getDetails());
} else {
break;
}
}
} // end of main()
} // end class
ผลการรันโปรแกรมได้ดังนี้
1,
James, 15000.0, Rama 3, Bangkok
2,
Ann, 25000.0, Silom, Bangkok
3,
Peter, 40000.0, Bangrak, Bangkok, [Parking No: 4C-19]
ตัวอย่างที่3
class Overload
{
void demo (int a)
{
System.out.println ("a: " + a);
}
void demo (int a,
int b)
{
System.out.println ("a and b: " + a + "," + b);
}
double demo(double
a) {
System.out.println("double a: " + a);
return a*a;
}
}
class MethodOverloading
{
public static void
main (String args [])
{
Overload Obj =
new Overload();
double result;
Obj .demo(10);
Obj .demo(10,
20);
result = Obj
.demo(5.5);
System.out.println("O/P : " + result);
}
}
ผลการรันโปรแกรมที่ได้ คือ
a: 10
a and b: 10,20
double a: 5.5
O/P : 30.25
ตัวอย่างที่ 4
public class BaseClass
{
public void
methodToOverride() //Base class method
{
System.out.println ("I'm the method of BaseClass");
}
}
public class DerivedClass extends BaseClass
{
public void
methodToOverride() //Derived Class method
{
System.out.println ("I'm the method of DerivedClass");
}
}
public class TestMethod
{
public static
void main (String args []) {
// BaseClass
reference and object
BaseClass obj1
= new BaseClass();
// BaseClass
reference but DerivedClass object
BaseClass obj2
= new DerivedClass();
// Calls the
method from BaseClass class
obj1.methodToOverride();
//Calls the
method from DerivedClass class
obj2.methodToOverride();
}
}
ผลการรันโปรแกรทที่ได้ คือ
.
I'm the method of BaseClass
I'm the method of DerivedClass
ตัวอย่างที่5
class Vehicle {
public void move
() {
System.out.println ("Vehicles are used for moving from one place to
another ");
}
}
class Car extends Vehicle {
public void move
() {
super. move ();
// invokes the super class method
System.out.println ("Car is a good medium of transport ");
}
}
public class TestCar {
public static void
main (String args []){
Vehicle b =
new Car (); // Vehicle reference but Car object
b.move ();
//Calls the method in Car class
}
}
ผลการรันโปรแกรทที่ได้ คือ
Vehicles are used for moving from one place to another
Car is a good medium of transport
inheritance
inheritance
การสืบทอด(inheritance) ในโปรแกรมเชิงวัตถุเป็นเเนวความคิดที่เรียนเเบบจากการสืบทอดลักษณะ ของลูกจากพ่อเเม่ ภาษาโปรแกรม ภาษาโปรแกรมเชิงวัตถุนำการสืบทอด มาใช้กับคลาสและอินเทอร์เฟช
ในการเขียนโปรแกรมภาษา Java นั้นเราไม่จำเป็นต้องสร้างคลาสขึ้นมาใหม่เองทั้งหมด แต่เราสามารถใช้คลาสที่มีคนสร้างไว้ หรือที่เราเคยสร้างไว้อยู่แล้วมาใช้ให้เป็นประโยชน์ได้
กลไลการสืบทอด
กลไกลการสืบทอด ช่วยแก้ไขปัญหาการเขียนโปรแกรม ซ้ำซ้อนกันได้ เมธอดหรือ แอตทริบิวต์ที่คลาสต่างๆ มีร่วมกันอยู่จะถูกนำไปใส่คลาสเเม่ คลาสลูกจะสืบทอดเมธอด เเละแอตทริบิวต์แม่โดยอัตโนมัติ การเเก้ไขการเปลี่ยนแปลงเมธอดในคลาสเเม่จะทำให้คลาสลูกเปลี่ยนตามไปด้วย เเมว ปลา เเละ ลิง ล้วนเป็นสัตว์ สัตว์ทุกตัวสามารถ กินเเละนอนได้ เราจึงนำแอตทริบิวต์เเละเมธอดที่สัตว์ต่างๆมีร่วมกัน ไปใส่ในคลาสสัตว์ คลาสสัตว์เขียนเป็น ภาษาไทยปนภาษา จาวา ได้ดังนี้
class สัตว์ {
// แอตทริบิวต์
อายุ ;
ความหิว ;
// เมธอด
กิน() {...}
นอน() {...}
หลังจากนั้น เราจะสามารถทำการเชื่มต่อคลาส เเมว ปลาเเละลิงกับคลาสสัตว์ โดยอาศัยกลไกลของการสืบทอด การสืบทอดในภาษาไทยปนภาษา จาวา ใช้คำว่า extends (ภาษา จาวา ก็ใช้extends เหมือนกัน ) การสืบทอดมีภาพเเบบดังนี้
ภาพเเบบ
class คลาสลูก extends คลาสเเม่
ตัวอย่างเช่น
class เเมว extends สัตว์ {
}
classปลา extends สัตว์ {
}
classลิง extends สัตว์{
}
เรื่องเกี่ยวกับการ Inheritance
เรื่องเกี่ยวกับการ Inheritance จะมีส่วนประกอบหลายส่วนประกอบกันที่คุณต้องทำความรู้จักดังนี้
- SuperClass เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณสมบัติ
- SubClass เป็นคลาสที่สืบทอดคุณสมบัติจากคลาสอื่น
- FinalClass คลาสที่ไม่ยอมให้คลาสอื่นสืบทอดคุณสมบัติ
- Override method การปรับเปลี่ยนคุณสมบัติของเมธอดในคลาสลูกให้ต่างจากคลาสแม่
SuperClass และ SubClass
- SuperClass เรียกง่ายๆ ว่า คลาสแม่ เป็นคลาสที่เป็นต้นแบบให้คลาสอื่นสืบทอดคุณลักษณะ เช่นคลาส Animal เป็น SuperClass ของคลาส Lion, คลาส elephant, คลาส Tiger, คลาส Dog และคลาส Cat
- SubClass เรียกง่ายๆ ว่า คลาสลูก เป็นคลาสที่สืบทอดคุณลักษณะ (ทั้งแอตทริบิวต์ และเมธอด)
ตัวอย่างสืบทอดไปสู่ SubClass ได้บ้าง
ตัวอย่าง 1
pulic class inheritUsing{
public static void main (String[]args){
Father ada = nwe Father();
String strIn = dad.ShowFather();
System.out.println(strIn);
son child =new Son();
strIn = child.ShowSon();
System.out.println(strIn);
strIn = child.ShowFather();
System.out.println(strIn);
}
}
class Father{
private int f1;
String ShowFather()
{
f1=(int) (Math.random()*10)+30;
return "class Father : age =" + f1;
}
}
class Son extends Father
private int s1;
String ShowSon()
{
s1 = (int)(Math.random()*10);
return "class Son : age =" +s1;
}
}
Override method
เป็นการแก้ไขเมธอดที่สืบทอดมาจากคลาสแม่ ซึ่งการ Override เมธอดในคลาสแม่นั้น คลาสลูกจะต้องมีชื่อของเมธอด ,ค่าส่งกลับออกจากเมธอด และค่าอาร์กิวเมนต์เหมือนคลาสแม่ แต่จะปรับปรุงการทำงานภายในที่ไม่เหมือนกับคลาสแม่
ตัวออย่าง 2
Public class
InheritOverride{
public static
void main(String[]args){
Parent dadmom = new Parent();
System.out.println(dadmom.Show());
Child
kid = new Child();
System.out.println(kid.Show
());
}
}
Class Parent {
Private
int px;
String Show(){
Px
= (int)(Math.random()*100);
Return “px = ”+ px;
}
}
Class Child extends Parent {
Private
int cx;
String Show() {
Cx
= (int)(Math.random()*100)-200;
Return
“cx = ” + cx;
}
}
FinalClass
คลาสที่ใช้คีย์เวิร์ด final กับตัวคลาส ทำให้เป็นคลาสที่ไม่สามารถืบทอดคุณสมบัติได้ แต่หากกำหนด คีย์เวิร์ด final ให้กับเพียงแค่บางเมธอดภายในคลาสที่เป็นแม่แล้ว จะทำให้คลาสลูกที่สืบทอดจากไม่สามารถแก้ไขข้อมูลต่างๆ ภายในเมธอดที่สืบทอดจากคลาสแม่ได้ (แต่คลาสแม่ยังสืบทอดต่อไปได้)
ตัวอย่าง 3
Final class Dinosaur
{
public int Weinght = 5000l;
String Show () {
Return
“I am Dinosaur. Wiegt =” + “kg”;
}
}
Class Reptile {
public int
Weight = 30;
final String
ShowReptile(){
return
“I am
reptile. Weight = ”+ Weight + “ kg ”;
}
}
ตัวอย่างที่ 4
class Calculation{
int z;
public void
addition(int x, int y){
z=x+y;
System.out.println("The sum of the given numbers:"+z);
}
public void
Substraction(int x,int y){
z=x-y;
System.out.println("The difference between the given
numbers:"+z);
}
}
public class My_Calculation extends Calculation{
public void
multiplication(int x, int y){
z=x*y;
System.out.println("The product of the given numbers:"+z);
}
public static void
main(String args[]){
int a=20, b=10;
My_Calculation
demo = new My_Calculation();
demo.addition(a,
b);
demo.Substraction(a, b);
demo.multiplication(a, b);
}
}
Compile and execute the above code as shown below
javac My_Calculation.java
java My_Calculation
After executing the program it will produce the following
result.
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200
วันจันทร์ที่ 9 พฤศจิกายน พ.ศ. 2558
Encapsulation
ตัวอย่างโค๊ต java
Encapsulation ก็คือ รวม data และ method ทั้งหลายที่เกี่ยวข้องกัน และทำงานร่วมกันเอาไว้ใน object หนึ่งๆ นอกจากนี้แล้วยังมีการซ่อนรายละเอียดของการทำงานของ method ต่างๆใน object เอาไว้ และไม่ให้ object อื่นๆสามารถที่จะเข้าไปแก้ไข data ได้โดยตรง การติดต่อสื่อสารกันระหว่าง object จะติดต่อกันผ่าน interface ที่กำหนดเอาไว้ ซึ่งตรงนี้จะก่อให้เกิดความสะดวกในการจัดการโค้ดต่างๆครับ เช่นถ้าเราเปลี่ยนลักษณะการเขียนโค้ดใน class ที่ encapsule เอาไว้ การเปลี่ยนของเราจะไม่ไปกระทบกับ class อื่นๆ
ตัวอย่าง 1 class ที่มี encapsule
public class Test{
private int data = 10;
public void setData(int data){
this.data = data;
}
public int getData(){
data = doSomthing();
return data;
}
private int doSomething(){
data = data * 5;
return data;
}
จากโค้ดข้างบน method doSomething() ให้เป็น public
public class Test{ private int data = 10; public void setData(int data){ this.data = data; } public int getData(){ data = doSomthing(); data = doAnotherThing(); return data; } public int doSomething(){ data = data * 5; return data; } public int doAnotherThing(){ data = data + 5; return data; } }
ตัวอย่างที่ 2
public class EncapsulationDemo{
private int ssn;
private String
empName;
private int
empAge;
//Getter and
Setter methods
public int
getEmpSSN(){
return ssn;
}
public String
getEmpName(){
return
empName;
}
public int
getEmpAge(){
return empAge;
}
public void
setEmpAge(int newValue){
empAge =
newValue;
}
public void
setEmpName(String newValue){
empName =
newValue;
}
public void
setEmpSSN(int newValue){
ssn =
newValue;
}
}
public class EncapsTest{
public static void
main(String args[]){
EncapsulationDemo obj = new EncapsulationDemo();
obj.setEmpName("Mario");
obj.setEmpAge(32);
obj.setEmpSSN(112233);
System.out.println("Employee Name: " + obj.getEmpName());
System.out.println("Employee SSN: " + obj.getEmpSSN());
System.out.println("Employee Age: " + obj.getEmpAge());
}
}
ผลการรันโปรแกรมที่ได้ คือ
Employee Name: Mario
Employee SSN: 112233
Employee Age: 32
สมัครสมาชิก:
บทความ (Atom)
Moodle 19+Font TH
Moodle 19+Font TH ดาวโหลด ดาวโหลด
-
แป้นพิมพ์ (keyboard) แป้นพิมพ์ หรือ คีย์บอร์ด ( keyboard) ประกอบด้วยปุ่มตัวอักษร ตัวเลข และสัญลักษณ์ต่างๆ เพื่อให้คุณ...