Thursday, May 27, 2010

Polymorphism буюу ондоошил.

Ондоошил гэдэг нь зөвхөн удамшлийн үед гардаг ойлголт юм. Тухайлбал А классаас Б, В гэсэн хоёр янзын класс тус тус удамшуулан гарган авсан байг. Тэгвэл А классын хувьсагч болгон зарлаад Б-ын байгуулагч, эсвэл В-ын байгуулагч функцээр обьектыг нь санах ойд үүсгэж болдог тухай ойлголт юм.

class Fruit {
public String color;

public Fruit(String name) {
this.color = color;
System.out.println("I am a fruit.");
}

public void doJuice() {
System.out.println("Fruit Juice. Enjoy IT!");
}
}

class Apple extends Fruit {
public Apple(String color) {
super(color);
System.out.println("I am an apple.");
}

public void doJuice() {
System.out.println("Apple Juice. Enjoy IT!");
}
}

class Orange extends Fruit {
public Apple(String color) {
super(color);
System.out.println("I am an orange.");
}

public void doJuice() {
System.out.println("Orange Juice. Enjoy IT!");
}
}

public class FruitDemo {
public static void main(String args[]) {

Fruit fruits[] = new Fruit[2];
fruits[0] = new Apple("Red");
fruits[0].doJuice();
fruits[1] = new Orange("Yellow");
fruits[1].doJuice();

Apple apple = (Apple) fruits[0];
apple.doJuice();
}
}


Дээрх жишээнээс харахад эцэг класс нэгтэй олон төрлийн subclass-ууд хоорондоо чөлөөтэй төрөл хувирч, ондооширч болж байна. Жава хэлний энэ шинж чанарыг маш өргөн ашиглаж олон төрлийн гайхалтай програмуудыг зохиосон байдаг.

inner class буюу доторх классын тухай ойлголт.

public class Main {
class Person {
// inner class defines the required structure
String first;
String last;
}

// outer class creates array of person objects with specific properties
// the objects can be referenced by personArray[1].last for example
Person personArray[]={new Person(), new Person(), new Person()};
}

Дээрх Main нэртэй класс нь дотроо Person классыг агуулж байна. Энэ класс нь зөвхөн Main класс дотор л амьдарна гэсэн үг. Main класс нь personArray нэртэй Person төрлийн массив хувьсагчтай байна. Массивийн элемент рүү дараах байдлаар хандаж болно.


personArray[1].first = "John";
personArray[1].last = "Conner";

Abstract буюу хийсвэр классын тухай.

Хийсвэр класс гэдэг нь тухайн классаас шууд обьект үүсгэн ашиглах боломжгүй, зөвхөн удамшуулан хэрэглэх зориулалттай класс юм.


abstract public class Employee {
private String name;

public Employee(String name) {
setName(name);
}
public String getName() {
return new String(name);
}

private void setName(String name) {
this.name = new String(name);
}

abstract public double pay();

public String toString() {
return "name is " + name;
}

}

Хийсвэр класс нь хийсвэр method-уудтай байх бөгөөд хийсвэр method-уудыг дахин тодорхойлж ашиглана. Түүнээс гадна хийсвэр класс нь хийсвэр бус method-уудтай байж болдог. Харин хийсвэр хувьсагч гэсэн ойлголт байдаггүй шүү.

Одоо дээрх хийсвэр классаас удамшуулан ашигласан байдлыг харуулая.


public class Hourly extends Employee {
public Hourly(String name, double rate, double hours) {
super(name);
setRate(rate);
setHours(hours);
}

public void setRate(double rate) {
this.rate = rate;
}
public void setHours(double hours) {
this.hours = hours;
}

public double getRate() {
return rate;
}
public double getHours() {
return hours;
}

public double pay() {
return rate * hours;
}

public String toString() {
return super.toString() + " (rate is " + rate + " and hours are " + hours + ')';
}

private double rate;
private double hours;
}

Дээрх жишээнд Employee класс доторх pay() нэртэй method нь abstract буюу хийсвэр функц учир Hourly класс дотор дахин тодорхойлж (override) ашигласан байна.

Incapsulation буюу битүүмжлэл гэж юу вэ?

Энэ нь тухайн классын зарим хувьсагчидад шууд хандах боломжыг хааж өгөх, далдлах арга хэлбэр юм.


public class Employee {
private float salary;

public float getSalary() {
return salary;
}

public void setSalary(float salary) {
this.salary = salary;
}

private хандалтын төрөлтэй хувьсагчийг зөвхөн тухайн класс дотроо хандан хэрэглэх боломжтой юм. Ийм хувьсагчид гаднаас хандах боломжгүй тул тухайн хувьсагчтай харьцах method-уудыг тодорхойлох нь зүйтэй. (getter, setter)

Дээрх классын хувьд salary талбарлуу дараах байдлаар шууд хандах боломжгүй.

Employee employee = new Employee();
employee.salary = 150.32;

Харин утга оноох method буюу setter функцыг хэрэглэх хэрэгтэй.

Employee employee = new Employee();
employee.setSalary(150.32);

Override гэдэг ойлголтын тухай. (дахин тодорхойлох)

Байгуулагч функыг дахин тодорхойлж болохгүй. Харин тэрний оронд удамшиж буй классын (цаашид subclass гэж нэрлэнэ) байгуулагч функц дотроос эцэг классын (цаашид superclass гэж нэрлэнэ) байгуулагч функцыг super() түлхүүр үгээр дуудаж хэрэглэнэ.


class Human {
public String name;
public int age;

public Human(String name, int age) {
this.name = name;
this.age = age;
}

public void whoAreYou() {
System.out.println("My name is "+ this.name + " and i'm "+ this.age);
}
}

public class Employee extends Human {
public String country;

public Employee(String name, int age, String country) {
super(name, age);
this.country = country;
}

public void whoAreYou() {
super.whoAreYou();
System.out.println("I'm from "+ this.country);
}

public static void main(String args[]) {
// Human классыг дангаар нь хэрэглэж үзэе
Human human = new Human("John", 30);

// Одоо Удамшсан классыг хэрэглэж үзэе
Employee emp = new Employee("Sarah", 25, "Brazil");
}
}

this түлхүүр үг нь тухайн классаа заадаг бол super түлхүүр үг нь superclass-аа заадаг. Override хийж буй method дотроос superclass-ын method руу super түлхүүр үг ашиглан хандсан байна. ( super.whoAreYou(); )

override буюу дахин тодорхойлохдоо дараах дүрмийг баримтална.
  • superclass-ын method-той адил нэртэй байна.
  • superclass-ын method-той адилхан буцах утгатай байна.
  • superclass-ын method-той адил аргументтэй байна.

superclass-ын method ыг дахин тодорхойлоогүй үед тухайн method өөрөө дуудагдаж ажиллана.

Нэг классаас хэдэн ч удаа удамшуулж болно. Удамшил нь хэдэн ч давхар удамшилтай байж болно. Жишээлбэл Human -> Employee -> Engineer -> ITEngineer

Давхар удамшлийн үед subclass-ын байгуулагчаас зөвхөн түүний superclass-ын байгуулагчыг дуудна. superclass-ын superclass гэсэн ойлголт байхгүй. Өөрөөр хэлбэл ITEngineer классаас Employee классын байгуулагчыг дуудаггүй.

subclass нь superclass-ын бүх методыг болон хувьсагчуудыг удамшуулан (өвлөн) авдаг. Өөрөөр хэлбэл superclass дээр бичигдсэн кодыг тэр чигт нь subclass дээр COPY хийж байгаатай адил. (мэдээж байгуулагч функц, болон static method-уудаас бусад)

Удамшил буюу inheritance гэж юу вэ?








Удамшил гэдэг нь нэг класс дотор тодорхойлогдсон хувьсагч, функцуудыг өөр классд өвлөн авч хэрэглэхийг хэлнэ.

Жава хэлэнд зөвхөн дан хэлбэрийн удамшил байдаг. Өөрөөр класс нь нэгээс олон классаас удамших боломжгүй.


Overload гэдэг ойлголтын тухай.

Ямар нэг классын нэг method-ыг хэд хэдэн аргаар тодорхойлохыг хэлнэ. Тухайлбал нэг класс нь хоёр өөр аргаар байгуулагддаг байж болно.


public class MyClass {
int x;
int y;

// Нэг аргумент авдаг байгуулагч функц.
public MyClass(int a) {
x = a;
y = 0;
System.out.println("First constructer has called.");
}

// Хоёр аргумент авдаг байгуулагч функц.
public MyClass(int a, int b) {
x = a;
y = b;
System.out.println("Second constructer has called.");
}

public static void main(String args[]) {
// Нэгдүгээр байгуулагч дуудагдана.
MyClass object1 = new MyClass(10);

// Хоёрдугаар байгуулагч дуудагдана.
MyClass object2 = new MyClass(10, 20);
}
}

Энэ мэтчилэн ямар ч method-ыг хичнээн ч аргаар overload хийж болно. Энэ нь удамшлаас үл хамаарах, бие даасан ойлголт юм.

Tuesday, May 25, 2010

Monday, May 17, 2010

RC CAR

Та ажилд орхын өмнө эдгээрийг эрэгцүүлээрээ

Ажилд орохын өмнөх өөрийн түүх

Өөрийн өнгөрсөн, одоо, ирээдүйн өнцөгөөс "Хүссэн ажилдаа орохын өмнө өөрийн түүх"-г бичиж үзэх нь өөрийгөө таньж мэдэхэд чинь хэрэгтэй.
Өөрийгөө зөв таньж мэдсэнээр ажилд орохын тулд одоо юу хийх хэрэгтэй байгаа чинь харагдана.

Өөрийн өнгөрсөн, одоо бүх л үеийн сурч байсан хийж ирсэн, олж мэдсэн, сэтгэлд үлдсэн зүйлээ бичиж үзэх



Дуртай хичээлХобби болон дуртай спортДугуйлан, секц
Бага анги, дунд ангид


Ахлах ангид


Оюутан үед





Сэтгэл чинь хөдөлсөн зүйл(Ном болон туршлага)Их хүч гарган хичээсэн зүйл чиньХамгийн хэцүү, хүнд байсан үе
Бага анги, дунд ангид


Ахлах ангид


Оюутан үед





Яагаад ажил хийх вэ?

Чиний хувьд ажил хийх зорилго юу вэ?
Ямар газар, ямар ажил хиймээр байгаагаа бодоод өөрийнхөө ажил хийх зорилгыг бичиж үзье.
1. Ажил хийх гол зорилго чинь эдийн засгийн шалтгаантай юу?
2. Ажил хийснээр нийгэмдээ хувь нэмэр оруулмаар байнуу?
3. Ажил хийснээр тухайн мэрэгжлийнхээ профессионал болмоор байна уу?
4. Ажил хийснээр хувь хүнийхээ хувьд өсөж, амжилт гаргахыг хүсэж байна уу?

Ажил хийх шалтгаан
Би яагаад хөдөлмөрлөхийг зорьж байна вэ?(Бодогдсон зүйлээ шууд бич)


















Чамд тохирох ажил

Чиний амьдарлыг үзэх үзэл, үнэлэмжХийхийг хүсэж байгаа ажил



Оюутан байх
хугацаандаа юуг
чухалчилж байсан бэ?
.................
Ямар ажил хийхийг
хүсэж байна вэ?
шалтгаан нь
.................
Ямар амьдралаар
амьдармаар байна бэ?
.................
Ямар салбарт ажилламаар
байна вэ?(Шалтгаан нь)

.................
Иргэн хүнийхээ хувьд
юуг чухалчилж амьдархыг
хүсдэг вэ?
.................
Ажиллахыг хүсэж байгаа
байгууллагын нэр
(Шалтгаан нь)
.................
20-оад нас 30-д насны
чинь зорилго.
Өөртөө илгээх үг
.................
Ажиллахыг хүсэж байгаа
байгууллагадаа амжилт гарган
ажиллахад өөрийгөө бэлдэх
.................

Би блог нээлээ.

Олон нийтэд өөрийн санаа бодлоо хуваалцан бичнэ гэдэг бол миний хувьд тэр сэдвийн талаар бодох боломжыг олгоно гэсэн үг. Би аль дээрээс л блог нээнэдээ гэж явсаар өнөөг хүрлээ харин өнөөдөр санамсаргүйгээр нээлээ. За ингээд миний блог бол таны блог миний бодол бол миний л бодол.