ตัวอย่างการเขียนโปรแกรม ( Control Structure )

 ตัวอย่างการเขียนโปรแกรม

1.if ( expression )

     statement;



 
alt


2.if ( expression )

     statement1;

else statement2;


alt

3. if (เงื่อนไขที่ต้องการตรวจสอบ)  

        {คำสั่งที่ เมื่อตรงตามเงื่อนไข

       {คำสั่งที่ เมื่อไม่ตรงตามเงื่อนไข



alt

Nested if

แบบที่ 

if (เงื่อนไข1)

{ if (เงื่อนไข2)

{ if (เงื่อนไข3)



}

}

else

คำสั่งต่าง ๆ เมื่อเงื่อนไขเป็นเท็จ; }



แบบที่ 

if (เงื่อนไข1) { คำสั่งเมื่อเงื่อนไขเป็นจริง; }

else

if (เงื่อนไข2) { คำสั่งเมื่อเงื่อนไขเป็นจริง; }

else

if (เงื่อนไข3) { คำสั่งเมื่อเงื่อนไขเป็นจริง; }




alt
alt
alt
alt

การเขียนโปรแกรมเชิงวัตถุ



ไวยากรณ์ Control structure



Control structure 


              - if คือ  คีย์เวิร์ดเพื่อตรวจสอบข้อมูลจากเอ็กเพลสชั่น


              - else คือ  คีย์เวิร์ดสำหรับควบคุมให้ทำงานตามคำสั่งเมื่อเอ็กเพลสชั่นเป็นเท็จ

             - expression คือ  เอ็กเพลสชั่นที่ให้ผลลัพธ์เป็นค่าตรรกะ โดยให้อยู่ภายในวงเล็บ

            - statement คือ  คำสั่งในการทำงานใดๆ

คำศัพท์ Object-Oriented programming


Abstraction

    ในทาง OOP การทำ Abstraction คือการซ่อน attribute และ behaviour ทุกอย่างที่ไม่เกี่ยวข้องกับ object เพื่อช่วยลดความซับซ้อนและเพิ่มประสิทธิภาพในการใช้งานAbstraction คือการแสดงถึงคุณลักษณะและพฤติกรรมของ object เท่าที่จำเป็นต้องรับรู้และใช้งานโดยซ่อนส่วนที่เหลือเอาไว้เพื่อไม่ให้เกิดความสับสน(data hidding และ encapsulation) วิธีการสร้างให้                                 ระบบเรามีคุณสมบัติ Abstraction คือใช้หลักของ Abstract Class หรือ Interface



 Encapsulation

     encapsulation คืออะไร
โดยทั่วไป encapsulation คือการรวมของสิ่งหนึ่งภายในอีกสิ่ง ดังนั้นสิ่งที่รวมไม่ปรากฎ decapsulation คือขจัดหรือทำให้สิ่งของปรากฎเหมือนก่อนการทำ encapsulation


 1) ใน object-oriented programming, encapsulation คือการรวมภายในอ๊อบเจคโปรแกรมของทรัพยากรทั้งหมดที่จำเป็นสำหรับอ๊อบเจคให้ทำงาน โดยพื้นฐานคือ เมธอด และข้อมูล อ๊อบเจคได้รับการกล่าวถึง “ตีพิมพ์อินเตอร์เฟซของตัวเอง” อ๊อบเจคอื่นยึดติดกับอินเตอร์เฟซเหล่านี้เพื่อใช้อ๊อบเจคนี้โดยปราศจากความกังวลการทำงานกับอ๊อบเจค ความคิดคือ “ไม่บอกว่าจะเรื่องนี้อย่างไร ให้ทำ” อ๊อบเจคสามารถคิดถึงการบรรจุอะตอม อินเตอร์เฟซของอ๊อบเจคประกอบด้วยเมธอดสาธารณะและข้อมูลประกอบ
  2) ในด้านโทรคมนาคม encapsulation เป็นการรวมของโครงสร้างข้อมูลหนึ่งภายในอีกโครงสร้าง ดังนั้นโครงสร้างข้อมูลแรกได้รับการซ่อนตามเวลา ตัวอย่าง แพ็คเก็ตข้อมูลฟอร์แม็ต TCP/IP สามารถห่อหุ้มภายในเฟรม ATM (อีกชนิดของการส่งผ่านข้อมูล) ภายในบริบทของการส่งผ่านและรับเฟรม ATM แพ็คเก็ตที่ห่อหุ้มเป็นกระแสของบิตระหว่างข้อมูล ATM ที่อธิบายการส่งผ่าน


 Modularity


Modularity

dulari

            Modularity หมายถึงการแบ่งระบบงาน

ที่มีขนาดใหญ่และซับซ้อนออกเป็นส่วนย่อยๆซึ่งจะ

ทำให้สามารถเข้าใจแต่ละส่วนได้ง่ายขึ้น

Toolsเครื่องมือที่สำคัญที่ใช้เช่น Structure

chart, Class diagram, UML
•คุณสมบัติที่พึงประสงค์ของ Modularity
  1. Coupling: เป็นตัววัดหรือบ่งบอกระดับ
ของ
ความสัมพันธ์ระหว่าง 2
          โมดุลใดๆ เราต้องการให้ค่า coupling ต่ำๆ 
coupling มี 5 ระดับคือ
  * Data coupling  * Stamp coupling
  * Control coupling  * Global coupling
  * Content coupling

                  

       Cohesion: เป็นตัววัดหรือบ่งบอกระดับการเกาะตัวกันหรือยึดเหนี่ยวกันระหว่างคำสั่งภายใน

โมดุลเดียวกัน ความต้องการคือในแต่ละโมดุลเราอยากให้ค่า cohesion สูงๆ cohesion มี ระดับคือ

  * Functional cohesion
  * Sequential cohesion
  * Communicational cohesion
  * Procedural cohesion
  * Temporal cohesion
  * Logical cohesion  * Coincidental cohesion

 Hierarchy


Hierarchy
คือการจัดกลุ่มสิ่งต่างๆตามระดับของ Abstraction โดยการใช้โครงสร้างแบบต้นไม้ (Tree structure)
Hierarchy ช่วยทำให้เราเห็นถึงความเหมือนกันหรือแตกต่างกันของสิ่งต่างๆได้ง่ายขึ้น
เช่น เรากำหนดกรอบของ Objectนาฬิกาโดยใช้ ชนิดของการแสดงเวลา เราก็จะได้กลุ่มของนาฬิกาแบบอนาล็อก และกลุ่มของนาฬิกาแบบดิจิตอล แต่ถ้าเรากำหนดกรอบใหม่เป็นชนิดของพลังงานที่นาฬิกาใช้เราก็จะได้กลุ่มของนาฬิกาที่ใช้ถ่าน, นาฬิกาที่ใช้พลังงานแสงอาทิตย์, นาฬิกาที่ใช้พลังงานจากการเคลื่อนไหว เป็นต้น




 class


Class คืออะไร
   Class คือ กลุ่มของ Object ที่มีโครงสร้างพื้นฐานพฤติกรรมเดียวกัน ดังนั้น Object ที่มีคุณสมบัติลักษณะเดียวกันนี้ จะรวมกลุ่มอยู่ใน Class เดียวกัน จึงสามารถสรุปได้ว่า Class คือ ต้นแบบข้อมูล ที่มีไว้เพื่อสร้าง Object นั่นเอง Class นอกจากจะมีชื่อ Class ที่บอกคุณสมบัติของ Class นั้นแล้ว ยังมี Attribute และ Operation ต่างๆ ซึ่งเป็นตัวอธิบายรายละเอียด และหน้าที่ต่างๆด้วย
   ตัวอย่าง Class เช่น 
   Class คือ แบบรูปดาวที่สร้างจากแม่แบบ (Template) และ Object คือ ดาวที่สร้างจากแม่แบบรูปดาว หรือ Class นั้นเอง ซึ่ง Object ที่ถูกสร้างขึ้นมาจะมีลักษณะเหมือนกับ Class ที่เป็นต้นแบบ แต่โดยคุณสมบัติของ Object แล้ว จะสามารถเพิ่มคุณสมบัติเฉพาะของตัวเองขึ้นมาได้ เช่น เพิ่มสีขึ้นมาเป็นคุณสมบัติเฉพาะตัวเองขึ้นมาได้ ทำให้ดาวแต่ละรูปมีสีสันที่ต่างกันไป แต่คุณสมบัติพื้นฐานจะได้รับการสืบทอดมาจาก class ที่เป็นต้นแบบยังเหมือนเดิม นั้นคือขนาดของรูปดาวจะเท่ากันทุกรูป เพราะได้จากแม่พิมพ์ตัวเดียวกัน หรือ มาจาก class เดียวกันนั้นเอง 

  ประโยชน์ของ Class
  จะเห็นได้ว่า Class ของการสร้างรูปดาวนั้น จะประกอบด้วยวิธีการทำ ซึ่งทำถ้ามีวิธการที่ต่างกันออกไป เช่น มีการผสมสีต่างๆ ให้รูปดาวแต่ละรูปมีสีที่ไม่เหมือนกันแล้ว เราก็จะได้รูปดาวที่มีลักษณะเฉพาะที่ต่างกัน นั้นคือมีสีที่ไม่เหมือนกัน ลองนึกเปรียบเทียบกับการเขียนโปรแกรม ซึ่งมีความซับซ้อน หลายขั้นตอน ใน 1 class เมื่อ โปรแกรมเมอร์จำเป็นต้องแก้ไข หรือพัฒนาโปรแกรมนั้น เค้าจะทำอย่างไร ? โปรแกรมเมอร์ก็เพียงเข้าไปดูใน class แล้วแก้ไขหรือเพิ่มเติมขั้นตอนต่างๆแทรกลงใน class ไม่จำเป็นต้องนั่งไล่วิธีต่างๆตั้งแต่แรก ซึ่งทำให้การแก้ไขโปแกรมของโปรแกรมเมอร์เป็นไปได้โดยง่าย เพราะโปรแกรมถูกจัดให้เป็นสัดส่วนไว้แล้ว

 object


Object คืออะไร
            ใน object-oriented programmable (OOP), object เป็นสิ่งที่ต้องการคิดถึงเป็นสิ่งแรก ในการออกแบบโปรแกรม และเป็นหน่วยของรหัสที่มาจากกระบวนการ ในแต่ละอ๊อบเจคที่สร้างใน class ของอ๊อบเจค และ class ได้รับการกำหนด ดังนั้น อ๊อบเจคสามารถแบ่งแบบจำลองและใช้ class definition ใหม่ในชุดคำสั่ง แต่ละอ๊อบเจคเป็น instance ของ class หรือ sub class ด้วยเมธอดของ class หรือ procdure และตัวแปร อ๊อบเจคเป็นสิ่งที่ทำงานในคอมพิวเตอร์
Object คือ วัตถุ สิ่งที่เป็นรูปธรรมและนามธรรม ที่มีอยู่จริงบนพื้นโลก (real-world)
  -สิ่งที่มีลักษณะเป็นรูปธรรม (จับต้องได้) เช่น จักรยาน, รถ, สุนัข, องค์กร, ใบรายการสินค้า, เป็นต้น
  -สิ่งที่มีลักษณะเป็นนามธรรม (จับต้องไม่ได้) เช่น ความเป็นเจ้าของ, ความคิด, ความรู้สึก เป็นต้น
object จะประกอบด้วย 2 ส่วนปฏิบัติการคือ attribute และ method
  1. Attribute หรือ Object Data กลับมาดู ถ้าเรามอง สุนัขเป็น Object สิ่งที่เป็น attribute ของ Object สุนัข ก็คือ ชื่อของสุนัข , เพศของสุนัข และ พันธ์ของสุนัข นั้นเอง หรือ ถ้าเรามอง เครื่องคอมพิวเตอร์ ของเราเป็น Object ส่วนที่เป็น attribute ของ Object เครื่องคอมพิวเตอร์ ก็จะเป็น ชนิดของคอมพิวเตอร์ , ยี่ห้อ หรือ รุ่น ของเครื่องคอมพิวเตอร์ นั้นเอง
  2. Method หรือ Object Behavior แปลเป็นไทยก็ ส่วนของพฤติกรรม ของ Object อย่างเช่น Object สุนัข จะมี method เป็น เห่า , วิ่ง หรือ กินข้าว และ เครื่องคอมพิวเตอร์ จะมี method เป็น การคำนวน , เล่นเกมร์ , วาดรูป
  
   ในด้านเทคโนโลยีคอมพิวเตอร์ ศัพท์คำว่า Object ถูกนำมาใช้ด้านการเขียนโปรแกรม ที่เรียกว่า โปรแกรมเชิงวัตถุ (OOP ย่อมาจาก Object Oriented Programming) ซึ่งหมายถึง การโปรแกรมที่เสมือนจริง มีลักษณะเสมือนธรรมชาติมากที่สุด แนวคิดของการเขียนโปรแกรมเชิงวัตถุนั้นให้ความสำคัญกับ ข้อมูล(data) และ พฤติกรรม(behavior) ของวัตถุ และความสัมพันธ์กันระหว่างวัตถุ ต่างกับ แนวคิดการเขียนโปรแกรมแบบดังเดิมมักนิยมใช้ การเขียนโปรแกรมเชิงกระบวนการ (Procedural Programming) ซึ่งให้ความสำคัญกับขั้นตอนกระบวนการที่ทำ โดยแบ่งโปรแกรมออกเป็นส่วนๆตามลำดับขั้นตอนการทำงาน ในการเขียนโปรแกรมเชิงวัตถุ ในโปรแกรมหนึ่งๆมีหลาย Object  โดยแต่ละ Object ก็จะมีความสัมพันธ์และเชื่อมโยงระหว่าง Object ด้วยกันเอง
ดังนั้น เราจึงจัด Object ให้เป็นกลุ่มๆ หรือ ที่เรียกว่าClass 
   class หมายถึง Object ที่มีโครงสร้างพื้นฐานพฤติกรรมเดียวกัน ดังนั้น Object ที่มีคุณสมบัติลักษณะเดียวกันนี้จะรวมกลุ่มอยู่ใน Class เดียวกัน จึงสามารถสรุปได้ว่า Class คือ ต้นแบบข้อมูลที่มีไว้เพื่อสร้าง Object นั่นเอง Class นอกจากจะมีชื่อ Class ที่บอกคุณสมบัติของ Class แล้ว ยังมี Attribute และ Operation ต่างๆ ซึ่งเป็นตัวอธิบายรายละเอียด และหน้าที่ต่างๆด้วย 












 การประกาศ class

           การประกาศ Class

สำหรับคนที่ยังไม่เคยเขียนโปรแกรมแบบ OOP อาจจะต้องศึกษาเพิ่มเติมกันนะครับ ถ้าให้สอนเองด้วยเดี่ยวจะยาว  ขั้นแรก เรามาดูรูปแบบการประกาศ class กันก่อนนะครับ


          ในรูปนี้เป็นเพียงการประกาศ ตัวแปร(Member variable) และเมธอด (Method) ของคลาสเท่านั้น ยังมีการประกาศ Property ที่เป็นการกำหนดคุณสมบัติให้กับตัวแปรอีก ซึ่งผมจะพูดถึงต่อไปนะครับ
ใน Objective-C นั้นเราสามารถประกาศตัวแปรได้ทั้ง 2 แบบ คือแบบ Strong type และแบบ Weak type สำหรับการประกาศแบบ Strong type ก็ประกาศแบบปกติครับ โดยขึ้นต้นด้วยชื่อ class และตามด้วย * (หมายถึงการเป็น pointer) และตามด้วยชื่อของ object ที่เราจะตั้ง แต่การประกาศแบบ Weak type นั้นจะใช้คำว่า id นำหน้าโดย “ไม่ต้องมี *” เพราะการประกาศ id นั้นจะเป็นการประกาศตัวแปรที่เป็น pointer ไปโดยอัตโนมัติ ซึ่งจะใช้บ่อยอยู่พอสมควรในกรณีที่เราไม่รู้ว่า object นั้นเป็น type อะไร ดังนี้ครับ
MyClass *myObject1;  // Strong typing
id       myObject2;  // Weak typing

 การประกาศ attributes


      คุณลักษณะของออปเจ็ค คือตัวแปรหรือค่าคงที่ซึ่งประกาศภายในออปเจ็ค โดยมีตัวอย่างการประกาศคือ


                                      [modifier] dataType attributeName;


- Modifier คือ คีย์เวิร์ดของภาษาจาวาที่อธิบายคุณสมบัติต่างๆ ของตัวแปรหรือค่าคงที่
- dataType คือ ชนิดข้อมูลซึ่งอาจเป็นชนิดข้อมูลพื้นฐานหรือชนิดคลาส
- attributeName คือ ชื่อของคุณลักษณะ


 การประกาศ methods


[modifier] return_type methodName ([argument]) {
[method body]
}

Modifier คือ คีย์เวิร์ด ของภาษาจาวาที่ใช้ในการอธิบายระดับการเข้าถึง (Access modifier)
Return_type คือ ชนิดข้อมูลของค่าที่จะมีการส่งกลับ
methodName คือ ชื่อของเมธอด
Arguments คือ ตัวแปรที่ใช้ในการรับข้อมูลที่ออปเจ็คส่งมาให้
Method body คือ คำสั่งต่างๆ ของภาษาจาวาที่อยู่ในเมธอด



 การประกาศ object


objectName = new ClassName 

([arguments]);


objectName  คือชื่อของออปเจ็ค


- new             คือคีย์เวิร์ดของภาษาจาวาเพื่อใช้ในการสร้าง

                      ออปเจ็ค

ClassName   คือชื่อของคลาส

Arguments   คือค่าที่ต้องการส่งผ่านในการเรียก 

                       Contructor


 การเรียกใช้ methods


                      objectName .methodName[(arguments)];
qobjectName คือชื่อของ object
qmethodName คือชื่อ method ของ object นั้น
qarguments  คือค่าที่ต้องการส่งผ่านไปให้กับ method ของ object นั้น  โดยที่จะต้องมีชนิดข้อมูลและจำนวน argument ให้สอดคล้องกับที่ประกาศใน method ของ object นั้น
qตัวอย่าง   s1.setName(“Thana”);

ข้อมูลเริ่มต้นจาก thaidev.com


จากเว็บไซต์ thaidev.com (expired) อธิบายเรื่อง OOP ให้เข้าใจได้ง่าย ๆ ผมจึง copy ส่วนหนึ่งของ Code มาให้ดู เพราะแสดงให้เห็นว่าสร้าง Object อย่างไร กำหนดคุณสมบัติ และสั่งให้ทำงานได้อย่างไร ปัจจุบันมีเว็บบอร์ดที่ยอดเยี่ยมมาก [webboard]

ตัวอย่างคลาส ที่เตรียมให้ถูกเรียกใช้
class TAirPlane {
   int color;  // สี เป็น คุณสมบัติอีกแบบ
   static void Fly() { };  // บิน เป็น พฤติกรรม หรือ กริยา ที่ object ทำได้
   static void Land() { };  // ลงจอด เป็น อีกพฤติกรรมหนึ่ง
   TAirPlane() {
     System.out.println("result of constructor");
   }
}

TAirPlane AirPlane1; // สร้าง object ชื่อ AirPlane1 จาก class ชื่อ TAirPlane AirPlane1 = new AirPlane1(); // จองพื้นที่ในหน่วยความจำ จึงจะเริ่มเรียกใช้ได้ AirPlane1.Fly(); // สั่งให้ object AirPlane1 ทำกริยา บิน AirPlane1.color = RED; // เปลี่ยน สี (คุณสมบัติ) ของเครื่องบิน ให้เป็นสีแดง

วิธีเรียกใช้ method แบบต่าง ๆ
    วิธีเรียกใช้ method แบบต่าง ๆ
      แบบที่ 1 : เรียกใช้ Constructor และใช้พื้นที่ในหน่วยความจำ
      
        class hello1 { public static void main(String args[]) { TAirPlane abc = new TAirPlane(); } }
      แบบที่ 2 : แยกประกาศใช้คลาสและใช้พื้นที่ในหน่วยความจำ
        class hello2 { public static void main(String args[]) { TAirPlane abc; abc = new TAirPlane(); } }
      แบบที่ 3 : ใช้พื้นที่ในหน่วยความจำ และเป็นการเรียกใช้ constructor ซึ่ง class นี้ ต้องอยู่ใน Directory เดียวกัน
        class hello3 { public static void main(String args[]) { new TAirPlane(); } }
      แบบที่ 4 : เรียกใช้ method Fly() แต่จะเรียก constructor มาก่อน ถ้า class นั้นมี constructor
        class hello4 { public static void main(String args[]) { new TAirPlane().Fly(); } }
      แบบที่ 5 : เมื่อสร้างวัตถุขึ้นมา สามารถเรียกใช้ method อื่น โดย constructor ทำงานเฉพาะครั้งแรก
        class hello5 { public static void main(String args[]) { TAirPlane abc = new TAirPlane(); abc.Fly(); abc.Land(); } }
      แบบที่ 6 : แสดงตัวอย่างการเรียก main และต้องส่ง Array of String เข้าไป
        class hello6 { public static void main(String args[]) { TAirPlane abc = new TAirPlane(); String a[] = {}; // new String[0]; abc.main(a); } }
      แบบที่ 7 : เรียกใช้ method ภายในคลาสเดียวกัน
        class hello7 { public static void main(String args[]) { minihello(); } static void minihello() { System.out.println("result of mini hello"); } }
      แบบที่ 8 : เรียกใช้ method แบบอ้างชื่อคลาส ในคลาสเดียวกัน
        class hello8 { public static void main(String args[]) { hello8 x = new hello8(); x.minihello(); } static void minihello() { System.out.println("result of mini hello"); } }
      แบบที่ 9 : เรียกใช้ method แบบไม่กำหนด method เป็น Static พร้อมรับ และคืนค่า
      :: ผลลัพธ์คือ 8
        class hello9 { public static void main(String args[]) { hello9 xx = new hello9(); System.out.println(xx.oho(4)); } int oho(int x) { return (x * 2); } }
      แบบที่ 10 : เรียกใช้ method ภายในคลาสเดียวกัน โดย method สามารถรับ และส่งค่าได้
      :: เรียก method ใน static ตัว method ที่ถูกเรียกต้องเป็น static ด้วย
        class hello10 { public static void main(String args[]) { System.out.println(oho(5)); } static int oho(int x) { x = x * 2; return x; } }
      แบบที่ 11 : ใช้ extends เพื่อการสืบทอด (Inheritance)
      :: Constructor ของ TAirPlane จะไม่ถูกเรียกมาทำงาน
        class hello11 extends TAirPlane { public static void main(String args[]) { Fly(); Land(); } }
      แบบที่ 12 : ใช้ extends เพื่อการสืบทอด (Inheritance) แบบผ่าน constructor
      :: Constructor ของ TAirPlane จะถูกเรียกมาทำงาน
        class hello12 extends TAirPlane { hello12() { Fly(); Land(); } public static void main(String args[]) { new hello12(); } }

     การเรียกใช้ attributes

    การเรียกใช้ Class Attribute ในการใช้งาน Class เมื่อเราต้องการที่จะอ้างอิง Attribute ที่อยู่ภายใน Class สามารถทำได้ โดยใช้ Pointer พิเศษที่ชื่อว่า $this ชี้ไปที่ชื่อของ Attribute ที่เราต้องการ รูปแบบ
    การเรียกใช้ Class Operation
    qการเรียกใช้งาน Class Operation จะทำได้ก็ต่อมีการเรียกใช้งานผ่าน instance ที่เราสร้างขึ้นมาจาก Class
    Example: Class Attribute & Operation