KEMBAR78
Java Programming: หลักการเชิงอ็อบเจกต์ | PDF
บทท 4
          หลกการเชงออบเจกต
        (Object Oriented Concept)

           ผศ.ธนศา เครอไวศยวรรณ
           คณะเทคโนโลย'สารสนเทศ
สถาบ+นเทคโนโลย'พระจอมเกล0าเจ0าค1ณทหารลาดกระบ+ง
วตถประสงค
 แนะน6าอ7อบเจกต9และคลาส

 อธบายค1ณล+กษณะและเมธอด

 อธบายการเข'ยนโปรแกรมเชงอ7อบเจกต9โดยใช0ภาษาจาวา

 แนะน6าการเข'ยนโปรแกรมโดยใช0ค1ณล+กษณะเด@นของโปรแกรมเชงอ7อบ
  เจกต9
 แนะน6า Unified Modelling Language

 อธบายข+Iนตอนการพ+ฒนาโปรแกรม
หลกการเชงออบเจกต
 ภาษาจาวาเปนภาษาคอมพวเตอรทใช$หลกการเชงออบเจกต

 OOP (Object Oriented Programming)

 OOP เปนขบวนการการพฒนาโปรแกรมโดยการจ*าลองปMญหาว@าประกอบไป
  ด0วยอ7อบเจกต9ใดบ0าง
 นยามท'Oส6าค+ญคอ
   •   อ7อบเจกต9 (object)
   •   คลาส (class)
ออบเจกต
 อ7อบเจกต9คอสOงต@างๆท'ม'อยRในช'วตประจ6าว+น
                       O @
    •   ออบเจกตทเปนร+ปธรรมเช-น น+กศSกษา ใบลงทะเบ'ยน ปากกา และรถ
    •   ออบเจกตทเปนนามธรรมเช-น คะแนน รายชOอวชา บ+ญช'เงนฝาก และตารางเทยวบน
 ออบเจกตประกอบด$วย
    •   คณลกษณะ (attribute) หร/อข$อม+ล (data)
    •   พฤตกรรม (behavior) หร/อเมธอด (method)
ออบเจกต
 ค1ณล+กษณะ
   •   ข0อมRลของอ7อบเจกต9
   •   แต@ละอ7อบเจกต9อาจม'ค@าของค1ณล+กษณะท'Oตางก+น
                                             @
 เมธอด
   •   สOงท'อ7อบเจกต9สามารถกระท6าได0
            O
   •   ค6าส+งในการท6างานของโปรแกรมเชงอ7อบเจกต9
              O
   •   โปรแกรมจะจ+ดการก+บข0อมRลโดยเร'ยกใช0เมธอด
ต+วอย@างของออบเจกต
 นกศ1กษา
   •   อาจจะมคณลกษณะเช-น รหส ช/อ และเกรดเฉลย
   •   อาจจะมเมธอดเช-น ลงทะเบยน สอบ และเดน
 รถยนต
   •   อาจจะมคณลกษณะเช-น ยห$อ ร-น และส
   •   อาจจะมเมธอดเช-น เคล/อนท หยด และเล3ยว
 สนข
   •   อาจจะมคณลกษณะเช-น ช/อ พนธ และส
   •   อาจจะมเมธอดเช-น เห-า คลาน และกระดกหาง
ต+วอย@างของโปรแกรมเชงอ7อบเจกต9
 โปรแกรมระบบจ+ดการบ+ญช'เงนฝากของธนาคาร

 ต+วอย@างของอ7อบเจกต9
     •   Account
     •   Customer
     •   Transaction
     •   ATM
   Account
     •   อาจม'ค1ณล+กษณะเช@น เลขท'Oบ+ญช' ชOอเจ0าของบ+ญช' ว+นท'เปXดบ+ญช' และยอดเงนคง
                                                             O
         เหลอ
     •   อาจม'เมธอดเช@น ฝาก ถอน และโอนเงน
คลาส
 เปรยบเสม/อนพมพเขยวของออบเจกต

 ออบเจกตจะถ+กสร$างมาจากคลาส บางคร3งเรยกว-าเปน instance ของคลาส
 คลาสหน1งคลาสสามารถสร$างออบเจกตได$หลายออบเจกต อาทเช-น คลาสช/อ
  Student อาจสร$างออบเจกตช/อ s1,s2 หร/อ s3 ซ1งเปนออบเจกตชนด
  Student
รRปแสดงการสร0างอ7อบเจกต9จากคลาส Student
ค1ณล+กษณะของอ7อบเจกต9
 ข0อมRลท'เก7บอยR@ในอ7อบเจกต9
          O
 แบ@งเปYนต+วแปร (variable) และค@าคงท'O (constant)
    •   ต+วแปรคอค1ณล+กษณะท'สามารถเปล'Oยนค@าได0
                               O
    •   ค@าคงท'Oคอค1ณล+กษณะท'ไม@สามารถเปล'ยนค@าได0
                             O            O
ต+วอย@างค1ณล+กษณะของอ7อบเจกต9
ค1ณล+กษณะของคลาส
 เปYนค1ณล+กษณะท'ใช0รวมก+นของท1กอ7อบเจกต9
                 O @
 ท1กอ7อบเจกต9จะใช0ค1ณล+กษณะร@วมก+นท6าให0ประหย+ดพIนท'Oในหน@วยความจ6า
 ต+วอย@างเช@น ค1ณล+กษณะท'ก6าหนดให0เปYนค@าคงท'ชOอ MIN_GPA
                          O                   O
ต+วอย@างค1ณล+กษณะของคลาส
เมธอด
 วธ'การหรอการกระท6าท'นยามอยRในคลาสหรออ7อบเจกต9เพOอใช0ในการจ+ดการ
                      O      @
  ก+บค1ณล+กษณะของอ7อบเจกต9
 เปร'ยบเท'ยบได0ก+บ function, procedure หรอ subroutine ของโปรแกรมเชง
  กระบวนการ
 ต+วอย@างเช@น เมธอด deposit()เพOอเปYนเมธอดส6าหร+บฝากเงน
การส/อสารระหว-างออบเจกต
 การส/อสารระหว-างกนของออบเจกตท*าได$โดยการผ-านข-าวสาร   (message)


                                          objB   คอชOออ7อบเจกต9
                                           method4   คอชOอเมธอด
                                           (1,2) คอargument
การส/อสารระหว-างออบเจกต
 ข-าวสารจะส-งผ-านจากออบเจกต objA ทเปนผ+$สง (sender) เพ/อเร'ยกการ
                                          -
  ท*างานของเมธอดทช/อ method4 จากออบเจกต objB ทเปนผ+$รบ
  (receiver)
 objB อาจส-งค-า (return value) บางค-ากลบมายง objA
การเข'ยนโปรแกรมเชงอ7อบเจกต9โดยใช0ภาษาจาวา
 การประกาศคลาส

 การประกาศค1ณล+กษณะ

 การประกาศเมธอด

 การประกาศและสร0างอ7อบเจกต9

 การเร'ยกใช0สมาชกของอ7อบเจกต9
การประกาศคลาส
 โปรแกรมภาษาจาวาแต-ละโปรแกรมจะประกอบไปด$วยคลาสอย-างน$อยหน1ง
  คลาส โดยม'ร+ปแบบการประกาศด+งน'I
               [modifier] class Classname {
                     [class member]
              }
    •   modifier ค/อคยเวรด   (keyword) ของภาษาจาวาทใช$ในการอธบายระดบการเข$าถ1ง
        (access modifier)
    •   class ค/อคยเวรดของภาษาจาวาเพ/อระบว-าเปนการประกาศคลาส
    •   Classname ค/อช/อคลาส
    •   class member ค/อเมธอดหร/อคณลกษณะ

 ต+วอย@าง
               public class Student {
               }
การประกาศค1ณล+กษณะ
 ค1ณล+กษณะของอ7อบเจกต9คอต+วแปรหรอค@าคงท'ซSOงประกาศภายในอ7อบ
                                         O
  เจกต9 โดยม'ร+ปแบบการประกาศด+งน'I
              [modifier] dataType attributeName;
    •   modifier คอค'ย9เวร9ดของภาษาจาวาท'Oอธบายค1ณสมบ+ตต@างๆของต+วแปรหรอค@า
        คงท'O
    •   dataType คอชนดข0อมRลซSOงอาจเปYนชนดข0อมRลพIนฐานหรอชนดคลาส
    •   attributeName คอชOอของค1ณล+กษณะ

 ต+วอย@าง
                public class   Student {
                      public   String id;
                      public   String name;
                      public   double gpa;
                }
การประกาศเมธอด
 ภาษาจาวาก6าหนดรRปแบบของการประกาศเมธอดท'อยRในคลาสไว0ด+งน'I
                                         O @
          [modifier] return_type methodName([arguments]) {
                [method_body]
          }
   •   modifier คอค'ย9เวร9ดของภาษาจาวาท'Oใช0อธบายระด+บการเข0าถSง
   •   return_type คอชนดข0อมRลของค@าท'จะม'การส@งกล+บ
                                         O
   •   methodName คอชOอของเมธอด
   •   arguments คอต+วแปรท'Oใช0ในการร+บข0อมRลท'อ7อบเจกต9ส@งมาให0
                                               O
   •   method_body คอค6าส+Oงต@างๆของภาษาจาวาท'อยR@ในเมธอด
                                                  O
ตวอย-างโปรแกรม
public class Student {
        public String id;
        public String name;
        public double gpa;
        public void setID(String ID) {
                id = ID;
        }
        public void setName(String n) {
                name = n;
        }
        public void setGPA(double GPA) {
                gpa = GPA;
        }
        public void showDetails() {
                System.out.println("ID: "+id);
                System.out.println("Name: "+name);
                System.out.println("GPA: "+gpa);
        }
}
เมธอดท'ชOอ main()
                           O
 โปรแกรมจาวาประย1กต9 (Java Application) จะเรOมต0นการท6างานในคลาสท'O
  ม'เมธอดท'OชOอ main โดยม'รปแบบของเมธอดด+งน'I
                           R

       public static void main(String args[]) {
           [method_body]
       }
การประกาศอ7อบเจกต9
 อ7อบเจกต9ท1กอ7อบเจกต9ในโปรแกรมภาษาจาวาจะต0องม'ค6าส+OงประกาศเพOอระ
  บ1ว@าอ7อบเจกต9นนเปYนอ7อบเจกต9ของคลาสใด โดยม'รปแบบการประกาศด+งน'I
                 +I                            R
              [modifier] ClassName objectName;
    •   modifier คอค'ย9เวร9ดท'Oอธบายค1ณสมบ+ตต@างๆของอ7อบเจกต9
    •   ClassName คอชOอของคลาสส6าหร+บอ7อบเจกต9น+Iน
    •   objectName คอชOอของอ7อบเจกต9

 ต+วอย@าง
               Student     s1;
การสร0างอ7อบเจกต9
 ค6าส+งท'Oใช0ในการสร0างอ7อบเจกต9จะม'รปแบบด+งน'I
       O                              R
              objectName = new ClassName([arguments]);
    •   objectName คอชOอของอ7อบเจกต9
    •   new คอค'ยเวร9ดของภาษาจาวาเพOอใช0ในการสร0างอ7อบเจกต9
                 9
    •   ClassName คอชOอของคลาส
    •   arguments คอค@าท'Oตองการส@งผ@านในการเร'ยก Constructor
                           0
 ต+วอย@าง
               s1 = new Student();
การประกาศและสร0างอ7อบเจกต9
 ค6าส+งในการประกาศและสร0างอ7อบเจกต9สามารถท'OจะรวมเปYนค6าส+Oงเด'ยวก+น
       O
  โดยม'รปแบบค6าส+งด+งน'I
        R        O
             [modifier] ClassName objectName =
                                 new ClassName([arguments]);

 ต+วอย@าง
             Student s1 = new Student();
การเร'ยกใช0สมาชกของอ7อบเจกต9
 การเร'ยกใช0ค1ณล+กษณะของอ7อบเจกต9ม'รปแบบด+งน'I
                                     R
                objectName.attributeName;
 การเร'ยกใช0เมธอดของอ7อบเจกต9ม'รปแบบด+งน'I
                                 R
              objectName.methodName([arguments]);
    •   objectName คอชOอของอ7อบเจกต9ทสร0างขSIน
                                       'O
    •   methodName คอชOอของเมธอดของอ7อบเจกต9น+Iน
    •   arguments คอค@าท'Oตองการส@งผ@านไปให0ก+บเมธอดของอ7อบเจกต9น+Iน
                           0
 ต+วอย@าง
                s1.setName("Thana");
ตวอย-างโปรแกรม
public class Sample {
        public static void main(String args[]) {
                Student s1 = new Student();
                Student s2 = new Student();
                Student s3 = new Student();
                s1.setID("1234");
                s1.setName("Thana");
                s1.setGPA(3.25);
                s1.showDetails();
                s2.setID("1122");
                s2.setName("Somchai");
                s2.setGPA(2.90);
                s2.showDetails();
                s3.setID("2211");
                s3.setName("Somsri");
                s3.setGPA(3.00);
                s3.showDetails();
        }
}
ค1ณล+กษณะเด@นของโปรแกรมเชงอ7อบเจกต9
 การห@อห10ม (Encapsulation)

 การสบทอด (Inheritance)

 การม'ได0หลายรRปแบบ (Polymorphism)
การห@อห10ม
 หมายถSงการจะเร'ยกใช0ค1ณล+กษณะของอ7อบเจกต9จะท6าได0โดยการเร'ยกผ@าน
  เมธอดเท@าน+Iน
 หล+กการของการห@อห1มคอการก6าหนดให0ค1ณล+กษณะของอ7อบเจกต9ม'
                    0
  ค1ณสมบ+ตเปYน private และก6าหนดให0เมธอดม'ค1ณสมบ+ตเปYน public
ข0อด'ของการห@อห10ม
 การซ@อนเร0นข0อมRล (Information Hiding)
    •   ท6าให0อ7อบเจกต9สามารถตดต@อก+บอ7อบเจกต9ภายนอกผ@านเมธอดท'เปYนส@วนของ
                                                               O
        interface เท@าน+Iน
 ความเปYนโมดRล (Modularity)
    •   การพ+ฒนาโปรแกรมเชงอ7อบเจกต9จะสามารถก6าหนดให0อ7อบเจกต9แต@ละอ7อบเจกต9ม'
        ความเปYนอสระต@อก+น
ตวอย-างโปรแกรม
public class Student {
        private String id;
        private String name;
        private double gpa;
        public void setID(String ID) {
                id = ID;
        }
        public void setName(String n) {
                name = n;
        }
        public void setGPA(double GPA) {
                gpa = GPA;
        }
        public void showDetails() {
                System.out.println("ID: "+id);
                System.out.println("Name: "+name);
                System.out.println("GPA: "+gpa);
        }
}
การสบทอด
 หมายถSงการนยามคลาสใหม@จากรRปแบบของคลาสท'Oม'อยR@แล0ว โดยคลาสใหม@
  สามารถท'Oจะน6าค1ณล+กษณะและเมธอดของคลาสเดมมาใช0ได0
 โดยในภาษาจาวาจะใช0ค'ยเวร9ด extends เพOอระบ1การสบทอด
                       9
 ต+วอย@าง
ตวอย-างโปรแกรม
public class PartTimeStudent extends Student { }
public class FullTimeStudent extends Student { }
public class GradStudent extends Student {
        private String thesisTitle;
        private String supervisor;
        public void setThesisTitle(String t) {
                thesisTitle = t;
        }
        public void setSupervisor(String s) {
                supervisor = s;
        }
}
public class PhDStudent extends GradStudent {
        public boolean passQualify;
        public boolean isPassQualify() {
                return passQualify;
        }
}
การม'ได0หลายรRปแบบ
 หมายถSงการท'สามารถตอบสนองต@อข@าวสาร (เมธอด) เด'ยวก+นด0วยวธ'การท'O
              O
  ต@างก+น และสามารถก6าหนดอ7อบเจกต9ได0หลายรRปแบบ
 Overridden method

 Dynamic Binding
ต+วอย@าง
ตวอย-างโปรแกรม
class Ball {
        public void throwBall() { }
}
class SoccerBall extends Ball {
    public void throwBall() {
        System.out.println("Throwing soccerball");
    }
}
class TennisBall extends Ball {
    public void throwBall() {
        System.out.println("Throwing tennisball");
    }
}
public class TestBall {
    public static void main(String args[]) {
        Ball b1 = new Ball();
        SoccerBall b2 = new SoccerBall();
        Ball b3 = new SoccerBall();
    }
}
คลาสแบบ        abstract

 คลาสทม modifier เปน abstract หมายความว@าคลาสน+นย+งเปYนคลาสท'O
                                                    I
  ไม@สมบRรณ9 โดยม'เมธอดแบบ abstract ซSงเปYนเมธอดท'ย+งไม@สมบRรณ9
                                      O           O
  อย@างน0อยหนSงเมธอดอยR@ในคลาส
              O
 รRปแบบของเมธอดแบบ abstract

  [modifier] abstract return_type methodName([arguments]);

 คลาสแบบ abstract ก6าหนดขSIนมาเพOอให0คลาสอOนสบทอด โดยคลาสท'มา
                                                            O
  สบทอดจะต0องก6าหนดบล7อกค6าส+งในเมธอดท'ย+งไม@สมบRรณ9
                             O         O
 เราไม@สามารถสร$างออบเจกตของคลาสแบบ abstract ได$
ตวอย-างโปรแกรมแสดงคลาสแบบ                     abstract

public abstract class Student {
        protected String id;
        protected String name;
        protected double gpa;
        public void setID(String ID) {
                id = ID;
        }
        public void setName(String n) {
                name = n;
        }
        public void setGPA(double GPA) {
                gpa = GPA;
        }
        public abstract void showDetails();
}
ตวอย-างคลาสท'Oสบทอดมาจากคลาสแบบ                    abstract

  public class FullTimeStudent extends Student {
          private int credit;
          private final int MAX_YEAR = 4;
          public FullTimeStudent(int c) {
                  credit = c;
          }
          public void showDetails() {
                  System.out.println("ID: "+id);
                  System.out.println("Name: "+name);
                  System.out.println("GPA: "+gpa);
                  System.out.println("Credit: "+credit);
          }
  }
อนเตอรเฟส
 อนเตอร9เฟส (interface) ม'ล+กษณะคล0ายก+บคลาสแบบ abstract แต@จะ
  ประกอบด0วยเมธอดท'ย+งไม@สมบRรณ9เท@าน+น
                   O                  I
 รRปแบบของอนเตอร9เฟส
      [modifier] interface InterfaceName {
            [methods();]
      }

 อนเตอร9เฟสก6าหนดขSIนมาเพOอให0คลาสอOนน6าไปใช0งานโดยใช0ค'ยเวร9ด
                                                          9
  implements โดยม'รปแบบด+งน'I
                   R
      [modifier] class ClassName implements InterfaceName {
            [methods();]
      }
อนเตอรเฟส
 อนเตอร9เฟสจะเหมอนก+บคลาสแบบ abstract ตรงท'Oเราจะไม@สามารถ
  สร0างอ7อบเจกต9ของอนเตอร9เฟสได0
 ประโยชน9ของอนเตอร9เฟสคอ
   •   การก6าหนดรRปแบบของเมธอดต@างๆท'OคลาสอOนๆจะต0อง implements ไว0ล@วงหน0า
       ซSOงสามารถอาศ+ยหล+กการของการม'ได0หลายรRปแบบมาเร'ยกใช0เมธอดเหล@าน+Iนได0จาก
       คลาสท'O implements อนเตอร9เฟส
   •   ภาษาจาวาก6าหนดให0คลาสใดๆสามารถสบทอดคลาสอOนได0เพ'ยงคลาสเด'ยวเท@าน+Iน
       แต@จะสามารถ implements อนเตอร9เฟสได0หลายอนเตอร9เฟส
ตวอย-างอนเตอรเฟส
public interface    Student {
     public void   setID(String ID);
     public void   setName(String n);
     public void   setGPA(double GPA);
     public void   showDetails();
}
ตวอย-างคลาสท'O implements อนเตอรเฟส
public class PartTimeStudent implements Student {
     private String id;
     private String name;
     private double gpa;
     private int credit;
     private final int MAX_YEAR = 8;
     public PartTimeStudent(int c) {
             credit = c;
     }
     public void setID(String ID) {
             id = ID;
     }
     public void setName(String n) {
             name = n;
     }
ตวอย-างคลาสท'O implements อนเตอรเฟส
      public void setGPA(double GPA) {
              gpa = GPA;
      }
      public void showDetails() {
              System.out.println("ID: "+id);
              System.out.println("Name: "+name);
              System.out.println("GPA: "+gpa);
              System.out.println("Credit: "+credit);
      }
}
แพคเกจ
 ซอฟตแวรแพคเกจช-วยในการจดการการพฒนาโปรแกรมขนาดใหญ-

 ในโปรแกรมภาษาจาวา แพคเกจจะเปนทรวมของคลาสของภาษาจาวา
  หลายๆคลาส
 โปรแกรมอาจแบ-งเปนแพคเกจและแพคเกจย-อย     (Subpackage)
 แพคเกจจะเกบไว$ในไดเรกทอร   (Directory) ซ1งจะเปนช/อของแพคเกจ
ตวอย-าง
โครงสร$างโปรแกรมภาษาจาวา
 ร+ปแบบโปรแกรมภาษาจาวามดงน3
      [<package_declaration>]
      [<import_declaration>]
     [<class_declaration>]
ค*าสง package
 ค*าสง package เปนการระบว-าคลาสอย+-ในแพคเกจใด
 ร+ปแบบของค*าสง package
     package <package_name>[<sub_package_name>];

 ต+วอย@าง
     package faculty.domain;

 โปรแกรมภาษาจาวาหนSOงโปรแกรมจะม'ค6าส+Oง package ได$เพยงค*าสงเดยว
  โดยจะเปนค*าสงแรกของโปรแกรม
 กรณ'ทไม@ม'ค6าส+ง package คลาสจะถ+กก*าหนดไว$ในแพคเกจ
       'O        O                                      default
ค*าสง import
 ค*าสง import เปนการเรยกใช$คลาสในแพคเกจต-างๆ
 ร+ปแบบของค*าสง import
   import <package_name>[.<sub_package_name>].<Class_name>
   • หรอ
   import <package_name>[.<sub_package_name>].*;

 ตวอยาง
   import faculty.reports.Report;
   • หรอ
   import java.awt.*;

 ค*าสง import จะอย+-ก-อนหน$าการประกาศคลาส

 โปรแกรมภาษาจาวาหน1งโปรแกรมสามารถมค*าสง import ได$หลายค*าสง
Unified Modeling Language (UML)
 เปYนภาษาท'Oสามารถน6ารRปกราฟฟXกมาจ6าลองโปรแกรมเชงอ7อบเจกต9ได0

 ประกอบด0วยสองส@วนคอ
   •   ไดอะแกรมของคลาส (Class Diagram)
   •   ไดอะแกรมของอ7อบเจกต9 (Object Diagram)
ไดอะแกรมของคลาส
 เปYนส+ญล+กษณ9ท'Oใช0แสดงคลาส

 ประกอบด0วยส@วนต@างๆสามส@วนคอ
   •   ชOอของคลาส
   •   ค1ณล+กษณะภายในคลาส
   •   เมธอดภายในคลาส
ไดอะแกรมของอ7อบเจกต9
 ประกอบไปด0วยส@วนต@างๆสองส@วนคอ
   •   ส@วนท'ระบ1ชอของอ7อบเจกต9
             O    O
   •   ส@วนท'ระบ1ค@าของค1ณล+กษณะภายในอ7อบเจกต9
               O
ข3นตอนการพฒนาโปรแกรม
 ข+นตอนการวเคราะห9 (Analysis)
    I
 ข+นตอนการออกแบบ (Design)
    I
 ข+นตอนการเข'ยนโปรแกรม (Programming)
    I
 ข+นตอนการทดสอบ (Testing)
    I
 ข+นตอนการท6างาน (Operation)
    I
รRปแสดงข3นตอนการพฒนาโปรแกรม
สร1ปเนIอหาของบท
 โปรแกรมเชงอ7อบเจกต9จะม'ค6านยามท'Oส6าค+ญสองค6าคอ อ7อบเจกต9และคลาส

 อ7อบเจกต9คอสOงต@างๆท'ม'อยRในช'วตประจ6าว+นจะประกอบไปด0วยค1ณล+กษณะ
                       O @
  และเมธอด
 คลาสเปร'ยบเสมอนพมพ9เข'ยวของอ7อบเจกต9 อ7อบเจกต9ท'OถRกสร0างมาจาก
  คลาส อ7อบเจกต9หลายอ7อบเจกต9สามารถถRกสร0างจากคลาสหนSงคลาสได0
                                                       O
 ค1ณล+กษณะของอ7อบเจกต9คอข0อมRลท'เก7บอยR@ในอ7อบเจกต9 ซSOงจะแบ@งออกเปYน
                                 O
  ต+วแปรและค@าคงท'O
 ค1ณล+กษณะของคลาสเปYนค1ณล+กษณะท'ใช0รวมก+นของท1กอ7อบเจกต9
                                 O @
 เมธอดคอวธ'การเพOอใช0ในการจ+ดการก+บค1ณล+กษณะของอ7อบเจกต9หรอ
  ค1ณล+กษณะของคลาส
สร1ปเนIอหาของบท
 ภาษาจาวาม'นยามในการเข'ยนโปรแกรมเชงอ7อบเจกต9เพOอประกาศคลาส
  ค1ณล+กษณะ เมธอด และอ7อบเจกต9
 โปรแกรมเชงอ7อบเจกต9จะม'คณล+กษณะเด@นอยRสามประการคอ การห@อห1ม
                          1             @                   0
  การสบทอด และการม'ได0หลายรRปแบบ
 การห@อห10มคอการท'Oให0ค1ณล+กษณะถRกห@อห1มอยRภายในเมธอด โดยก6าหนดให0
                                        0 @
  ค1ณล+กษณะม' access modifier เปYน private และก6าหนดให0เมธอดม'
  access modifier เปYน public
 ข0อด'ของการห@อห1มคอการซ@อนเร0นข0อมRลและความเปYนโมดRล
                  0
 การสบทอดคอการท'Oคลาสใหม@สามารถน6าเอาค1ณล+กษณะและเมธอดของ
  คลาสท'Oออกแบบไว0แล0วมาใช0ได0
สร1ปเนIอหาของบท
 การม'ได0หลายรRปแบบคอการท'ก6าหนดให0ม'การตอบสนองต@อเมธอดเด'ยวก+น
                           O
    ด0วยวธ'การท'Oตางก+น และสามารถก6าหนดอ7อบเจกต9ได0หลายรRปแบบ
                  @
 คลาสแบบ abstract คอคลาสท'OยงเปYนคลาสท'ไม@สมบRรณ9 โดยม'เมธอด
                             +          O
    แบบ abstract ซSOงเปYนเมธอดท'Oยงไม@สมบRรณ9อย@างน0อยหนSงเมธอด
                                  +                      O
 อนเตอร9เฟสม'ล+กษณะคล0ายก+บคลาสแบบ abstract แต@จะประกอบด0วย
    เมธอดท'ย+งไม@สมบRรณ9เท@าน+น
           O                  I
   ค6าส+Oง package เปYนการระบ1ว@าคลาสอยR@ในแพคเก7จใด
   ค6าส+Oง import เปYนการเร'ยกใช0คลาสในแพคเก7จต@าง
สร1ปเนIอหาของบท

 Unified Modeling Language (UML) เปYนภาษาท'Oใช0รปกราฟฟXกเพOอจ6าลอง
                                                 R
  ระบบซอฟต9แวร9 ในท'นได0แนะน6าส+ญล+กษณ9ของ UML ท'Oส6าค+ญสองอย@างคอ
                    O 'I
  ไดอะแกรมของคลาสและไดอะแกรมของอ7อบเจกต9
 ว+ฎจ+กรการพ+ฒนาโปรแกรมจะประกอบไปด0วยข+Iนตอนต@างๆ 5 ข+Iนตอนคอ
  ข+นตอนการวเคราะห9 ข+Iนตอนการออกแบบ ข+Iนตอนการเข'ยนโปรแกรม ข+Iน
    I
  ตอนการทดสอบ และข+นตอนการท6างาน
                     I
แบบฝlกห+ด
 แบบฝlกห+ดท'O 1 การออกแบบคลาส
   •   เข'ยนข0อก6าหนดอธบายระบบโปรแกรมส6าหร+บการต+ดเกรดของรายวชาหนSOงรายวชา
   •   เข'ยนไดอะแกรมของคลาสเพOออธบายค1ณล+กษณะและเมธอดท+งหมดท'ม'อยR@ในคลาส
                                                         I     O

Java Programming: หลักการเชิงอ็อบเจกต์