วันพุธที่ 13 พฤศจิกายน พ.ศ. 2562

การสร้างคลาส (Kotlin and Swift for Java Developer)



ปัจจุบันภาษาโปรแกรมสมัยใหม่นั้น รองรับการเขียนโปรแกรมเชิงวัตถุ ไม่ว่าจะเป็น ภาษา Java Swift Python  PHP  C++,C# Objective C เป็นต้น แม้ว่าแนวคิดการเขียนโปรแกรมเชิงวัตถุจะมีมานานแล้วก็ตาม ช่วงปี พ.ศ. 2500-2510 เพื่อเป็นอีกทางเลือกในการเขียนโปรแกรมเพื่อแก้ปัญหา ซึ่งเดิมทีจะใช้การเขียนโปรแกรมเชิงโครงสร้างในการแก้ปัญหา

การศึกษาการเขียนโปรแกรมเชิงวัตถุนั้นยังเป็นพื้นฐานในการเรียนรู้ Design Patterns ช่วยให้การออกแบบซอฟต์แวร์มีแบบแผนที่ดี แต่ทั้งนี้ขึ้นอยู่กับองค์ความรู้ของผู้ที่ประยุกต์ใช้งานด้วยเช่นกัน

Design Patterns ได้รับการเผยแพร่ในหนังสือ Design Patterns: Elements of Reusable Object-Oriented Software ตั้งแต่ปี 2538 ซึ่งถูกนำมาประยุกต์ใช้งานจริงอย่างแพร่หลาย อาทิ เช่น Singleton,  Facade, Strategy เป็นต้น   และใน Kotlin มี คีย์เวิร์ค Object ในการสร้างคลาสแบบ Singleton

การสร้างคลาสในภาษา Java

ไวยากรณ์
class ClassName {
   modifiers data_type properties;
   modifiers return_type method() { }
}
modifier แบ่งเป็น
- access modifier เช่น default, public, protected, private
- non access modifier เช่น static, final, abstract, synchronized กับ volatile (threads)

ตัวอย่าง
// Product.java
public class Product {
    private String productID;
    private String productName;
    Product(String p_id, String p_name){
      productID = p_id;
      productName = p_name;
    }
    public String getDetailProduct(){
      return "Product ID : "+productID+" and Product Name : "+productName;
    }
}

// TestDriveClass.java
public class TestDriveClass {
    public static void main(String[] args) {
        Product p = new Product("P0001","Nintendo Switch");
        System.out.println(p.getDetailProduct());
    }
}

การสร้างคลาสในภาษา Kotlin

ไวยากรณ์
class ClassName {
   modifiers val properties:data_type
   modifiers fun method():return_type{
   }
}
modifier เกี่ยวกับ access control เช่น public, internal, fileprivate, private

ตัวอย่าง
// Product.kt
public class Product1 {
    private val productID:String
    private val productName:String
    constructor(p_id:String, p_name:String){
      productID = p_id
      productName = p_name
    }
    public fun getDetailProduct():String{
      return "Product ID : $productID and Product Name :  $productName"    
    }
}

// TestDriveClassK.kt  ไม่ต้องสร้างคลาสเพื่อเรียกใช้ กำหนด Main Class ใน Configuration เป็น TestDriveClassKKt
fun main(){
    val p1 = Product1("P0002","Play Station 4")
    println(p1.getDetailProduct())
}

มี constuctor 2 แบบ

primary constructor
class Product constructor(productName: String) { … }
หรือละคำว่า constructor
class Product (productName: String) { … }

secondary constructor
init{…}  // ใช้ตอนสร้างอ็อบเจ็คแบบไม่ระบุพารามิเตอร์ มีมากกว่า 1 ได้
constructor(){...} // กรณีมีการระบุพารามิเตอร์หลายรูปแบบ

modifier เช่น open, override

เนื้อหาที่เกี่ยวข้อง

การสร้างคลาสในภาษา Swift 

ไวยากรณ์
class ClassName {
   modifiers var properties:data_type
   modifiers func method()->return_type{
   }
}
modifier เกี่ยวกับ access control เช่น public, internal, fileprivate, private
เนื้อหาที่เกี่ยวข้อง

ตัวอย่าง ใช้ playground 
public class Product {
    private var productID:String
    private var productName:String
    init(p_id:String, p_name:String){
      productID = p_id
      productName = p_name
    }
    public func getDetailProduct()-> String{
      return "Product ID : \(productID) and Product Name : \(productName)"
    }
}

var p = Product(p_id:"P0001",p_name:"Nintendo Switch")
print(p.getDetailProduct())
print(p.getDetailProduct()+"\n")

การสร้างคลาสในภาษา PHP

ไวยากรณ์
class ClassName {
   modifiers $properties
   modifiers function method(){   // ไม่ต้องระบุ return type
       return // กรณีมีการส่งค่ากลับ
  }
}

modifier 
public, private, protected, abstract, final ใช้ได้กับ function
public, private, protected ใช้ได้กับ properties
abstract, final ใช้ได้กับ class
ตัวอย่าง PHP 7.x
class Product {
    private $productID;
    private $productName;
    function __construct($p_id,$p_name){
      $this->productID = $p_id;
      $this->productName = $p_name;
    }
    public function getDetailProduct(){
       return "Product ID : ".$this->productID." and Product Name : ".$this->productName;
    }
}
$p = new Product("P0001","Nintendo Switch");
print $p->getDetailProduct();

function หากไม่ระบุ modifier จะเป็น public

การสร้างคลาสในภาษา Python

ไวยากรณ์
class ClassName:
    def __init__(self):
    def method(self):
}

ตัวอย่าง Python 3.x
class Product:
    def __init__(self, product_id, product_name):
        self.product_id = product_id
        self.product_name = product_name

    def getDetailProduct(self):
        return "Product ID : "+self.product_id+" and Product Name : "+self.product_name

p1 = Product("P0001", "Nintendo Switch")
print(p1.getDetailProduct())
modifiers ของ properties
self.name=name # public attribute
self._name=name # protected attribute
self.__name=name  # private attribute
modifiers ของฟังก์ชัน เช่น public, private, and protected
notation เช่น @staticmethod



ไม่มีความคิดเห็น:

แสดงความคิดเห็น