[10.04.2009]
เนื่องจาก โดยปกติแล้ว จะเขียนบันทึกการฝึกงานที่ทำงาน – -”
เพราะว่าเลิกงาน กลับมาหอ ก็ไม่อยากเปิดคอมแล้ว วันๆ อยู่แต่หน้าคอม เบื่อ
แต่หลังๆ มานี่ ไม่มีเวลาว่างจะอัพเลย ก็เลยต้องดองไว้นานหน่อย
มาเริ่มกันเลยดีกว่า
วันนี้ (นายกประกาศให้เป็นวันหยุดราชการ แต่บริษัทเราไม่หยุด เพราะเป็นเอกชน)
ก็มาทำงานปกติ ม็อบเสื้อแดงก็ยังไม่สงบดีนัก แต่ก็ต้องมาทำงาน
งานวันนี้
ก็คือ พี่ให้ฝึกเขียน console application โดยใช้ database northwind (เหมือนเดิม)
โดยเขียนแบบ MVC (Model View Controller) ซึ่งประกอบไปด้วย
– PLS
– BLM
– DAO
โดยวันนี้ ได้ทดลองใช้ source safe คือเขียนร่วมกันกับเพื่อนในทีมอีกคน (ชื่อหลี)
ก็แบ่งกันตารางกันว่าใครจะจัดการข้อมูลตารางไหนบ้าง
จากนั้นก็ลงมือเขียน
หลักๆ ก็คือ สร้างโปรเจคย่อยๆ ดังนี้
- PLS จะเป็นส่วนที่แสดงให้ผู้ใช้เห็น ในที่นี้คือ เป็นส่วนแสดง menu ให้ผู้ใช้เลือก
- BLM ในที่นี้ทำหน้าที่แค่เชื่อมต่อข้อมูลระหว่างชั้น PLS และ DAO (เนื่องจากยังไม่มี Bussiness Rule ใดๆ เลย)
- DAO ทำหน้าที่คิวรี่ข้อมูลออกมา แล้วส่งต่อไปให้ยัง BLM
- Common ทำหน้าที่เป็น properties ในแต่ละ field ต่างๆ ของแต่ละ table
สิ่งที่ได้จากวันนี้
การสร้าง Object
Object obj = new Object();
การเรียก new Object(); มันจะไปจอง memory ส่วน obj นั้น เป็นเหมือนตัวชี้ไปที่ mem นั้นๆ
ดังนั้น สามารถ new Object(); ได้เลยแบบไม่ต้องมีตัวชี้
(เพื่อความเข้าใจมากยิ่งขึ้น ดูจากการ Assign ค่าให้กับ Object)
การ Assign ค่าให้กับ Object สามารถทำได้ 2 แบบดังนี้
1.
supplier.Add(new SupplierDo(){
Address = reader["Address"].ToString(),
City = reader["City"].ToString()
});
2.
SupplierDo supplierSample = new SupplierDo();
supplierSample.Address = reader["Address"].ToString();
..
..
..
..
supplier.Add(supplierSample);
โดยที่แบบที่ 1 จะสร้างตัว object ขึ้นมา ทำการ assign ค่า แล้ว List ก็ Add เข้าไปเลย
ส่วนแบบที่ 2 จะสร้าง object พร้อมกับชื่อเรียกตัวมัน ทำการ assign ค่า สั่งให้ List Add ชื่อเรียกนั้นๆ (ซึ่งชื่อเรียกนั้น เปรียบเสมือนตัวชี้ไปที่ object)
Set + Get
ใน java เราจะต้องเขียนเป็น method
แต่ใน C# ไม่ต้อง ให้มองว่าเป็น properties ตัวหนึ่ง
(รายละเอียด เดี๋ยวมาเพิ่มให้)
ตัวอย่างใน java
class Student {
private String name;
private double grade;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public double getGrade() {
return this.grade;
}
public void setGrade(double grade) {
if(grade < 0 || grade > 4)
throws new Exception();
else
this.grade = grade;
}
}
class School {
public void displayGrade(){
Student s = new Student();
s.setName("Dew");
s.setGrade(4.0);
}
}
ตัวอย่างใน c#
class Student {
private string _name;
public string Name {
get { return this._name; }
set { this._name = value; } // value ในที่นี้ก็คือค่า Name นั่นแหละ
}
private double _grade;
public double Grade {
get { return this._grade; }
set {
if(this._grade < 0 || this._grade > 4)
throws new Exception();
else
this._grade = value; // value ในที่นี้ ก็คือค่า Grade นั่นแหละ
}
}
}
class School {
public void displayGrade(){
Student s = new Student();
s.Name = Dew;
s.Grade = 4.0;
}
}
โดยที่ c# มันจะรู้เองว่าจะเรียกใช้ get หรือ set โดยดูที่ว่า ถ้ามีการ assign ค่าให้ (มีเครื่องหมาย = ) จะเรียกใช้ set ถ้าไม่ใช่ ก็จะเป็นการเรียกค่าออกมา ก็คือใช้ get
** สำหรับ snippet ของ properties คือ พิมพ์ prop แล้วตามด้วย tab 2 ครั้ง


ตอนเย็น พี่ดิวสอน Basic C#
ส่วนประกอบของ Class
- Access Modifier
- public : จะมองเห็นได้ทุกๆ class
- private : จอมองเห็นเฉพาะ class ตัวมันเอง
- protected : จะมองเห็น class ที่ inherit มาด้วย
- Method
[AccessModifier]{static}[ReturnType][MethodName](param){
…
}
- Properties : ต่างจาก method ที่ ไม่รับค่า param
[AccessModifier]{static}[Type][PropName]{
set { abc = value; }
get {return abc; }
}
Type : เป็นอะไรก็ได้ (เป็น obj ก็ได้)
static : ไม่ต้อง new, มี 1 เดียวเท่านั้น
constructor :
- จะถูกเรียกครั้งแรกครั้งเดียวที่มีการ new (จึงไม่สามารถเรียกใช้ได้)
– จะมีทุกๆ class
– ไม่สามารถ return ค่าใดๆ ได้ (เอาไว้เริ่มค่า)
* เหมือน method คือรับ param ใดๆ มาก็ได้
public [ClassName](){
}
base -> scope ของ class แม่ จะเห็น public, protected จะไม่สนใจ method class ตัวเอง
เรียก constructor ของ class แม่
this -> scope class
(All code from P’Dew) : Training.zip
