Saturday, April 24, 2010

Мариа Шарапова

Мария Юрьевна Шарапова нь 1987 оны 4 сарын 19-нд Оросын Сиберийн Няган гэх хотод Юри болон Эленагийн гэр бүлд төрсөн. Тэрээр Дэлхийн номер нэг Оросын тамирчин ба гурван удаагийн ганцаарчилсан Grand Slam-н аварга байсан. 2010 оны 4 сарын 5-ны өдрийн байдлаар тэрээр дэлхийн номер 14 дэхь тамирчин гэж жагссан байна.
Шараповаг зургаан настай байхад эцэг нь охиноо дагуулан ядуу амьдралаасаа салж, түүнийг Nick Bollettieri Теннисийн Академид оруулахын тулд Оросоос Америкийн нэгдсэн улс руу нүүсэн. Үүний дараах жилүүдэд сонирхогчийн болон мэргэжлийн жагсаалтуудаар түргэн өссөнийхөө дараа тэрээр анхны Grand Slam цомыг 2004 онд Wimbledon-д 17 насандаа авж байсан. Дараагийн хоёр жил нь тэрээр WTA Tour буюу эмэгтэйчүүдийн теннисний холбооны тэмцээнд 8 ч удаа түрүүлж, хоёр ч удаа дэлхийн номер нэг тамирчин байсан. Гэсэн хэдий ч энэ хугацаанд тэрээр 5 Grand Slam хагас финалдаа бүгдэнд нь хожигдсон. Эцэст нь тэрээр 2006 оны Америкийн нээлттэй тэмцээн дээр өөрийн 2 дахь Grand Slam цомыг хожсон юм.
2007 онд түүний баруун гарын гэмтэл нь Шараповаг хэд хэдэн тэмцээнээс татгалзахад хүргэсэн ба энэ нь 3 жилийн хугацаанд анх удаа Эмэгтэйчүүдүийн Теннисний Холбооны дэлхийн жагсаалтын топ 5-аас анх удаа унахад хүргэсэн том шалтгаан болсон. Хэдий тэрээр өөрийн 3 дахь Grand Slam-г Австралийн нээлттэй тэмцээн дээр 2008 оны эхээр хожиж, дэлхийн номер 1-т буцан ирсэн боловч, 2008 оны 10 сард түүний мөрөнд мэс засал хийх хэрэгтэй болсон юм. 2009 оны 5 сар хүртэл арван сар тэр спортоосоо хол байсан ба энэ нь түүнийг топ 100 жагсаалтаас унахад хүргэсэн юм. Түүнийг буцаж ирснээс хойш түүний жагсаалт топ 15-д эргэн орсон.
Тэрээр 6 настайдаа нүүж ирснээсээ хойш АНУ-д амьдарсан. Одоо Калифорнийн Манхаттан эрэг дэх гэртээ амьдардаг. Тэрээр загвар, кино, хөгжим болон Шерлок Холмес, Пиппи Лингстокин унших нь түүний талбайгаас гаднах бусад сонирхол нь гэж хэлдэг. Шарапова Оросын 2014 оны Сочигийн өвлийн олимпийг сурталчилахад үнэтэй хувь нэмэр оруулсан. Түүнийг Los Angeles Lakers багийн тамирчин, Словиан гаралтай Александр Саша Вужасиктай үерхэж байгаа гэж мэдээ гарч байсан.
2005 оны 4 сард People сэтгүүл түүнийг хамгийн хөөрхөн 50 алдартны тоонд оруулсан бол 2006 онд Максим сэтгүүл түүнийг дөрөв дэхь жилдээ жагсаалтынхаа дэлхийн хамгийн халуухан тамирчнаар зарласан. 2007 оны зургаан сард Forbes сэтгүүл түүнийг жилд 26 сая америк долларын ашгаар дэлхийн хамгийн өндөр орлоготой эмэгтэй тамирчнаар шалгаруулсан. 2010 оны 1 сард Шараповаг Nike-тай хийсэн гэрээгээ дахин шинэчилсэн ба 8 жилийн хугацаатай 70 сар америк долларын гэрээ байгуулсан тухай зарласан. Энэ нь өмнөх Venus Williams-н Reebok-тай хийсэн 43 сая долларын гэрээг даван, эмэгтэй тамирчны хувь дахь хамгийн өндөр төлбөр бүхий гэрээ болсон.
Тэр дан ганц теннисээс гадна олон зүйлээр алдартай. Тэр хэд хэдэн загвар өмсөх үүргийг гүйцэтгэсэн ба Sports Illustrated Swimsuit Issue сэтгүүлд тусгай зургаа авахуулж байсан. 2005-с 2008 оны хооронд Yahoo дээрх хамгийн их хайгдсан тамирчин болсон. 2007 оны 2 сараас хойш Нэгдсэн Үндэсний Байгууллагын Хөгжлийн Хөтөлбөрийн Сайн Сайхны Төлөөлөгч болсон ба ялангуяа энэ нь Чернобилийн нөхөн сэргээх, хөгжлийн хөтөлбөрийн хувьд хамаатай юм.

Tuesday, May 19, 2009

C# article no.2 Polymorphism, Delegate, Abstract, Interface

Polymorphism

Удамшлаар дамжин class нь нэг төрлөөс илүү хэрэглэгдэж болно. Ингэж хэрэглэгдэхдээ өөрийн гэсэн нэг төрөл, суурь классын төрөл, эсвэл хэрвээ интерфейсийг хөгжүүлж байгаа бол интерфейсийн төрөл маягаар гэх мэтчилэн олон хэлбэрээр хэрэглэгдэж болно. Үүнийг polymorphism гэдэг. Энэхүү polymorphism гэх үгийн “poly” нь “олон”, “morphism” нь “хэлбэр” гэсэн утгатай ба нийлвэл “олон хэлбэр” болж байгаа юм. C# хэлэнд төрөл бүр polymorphism шинжтэй байдаг. Төрлүүд нь өөрийн гэсэн төрөл, эсвэл объект instance маягаар ашиглагдаж болох ба учир нь ямар ч төрөл автоматаар объекттэй суурь төрөл мэтээр харьцдаг.
Polymorphism нь дан ганц удамшсан классуудад чухал бус, мөн эх классуудад нь ч гэсэн чухал байдаг. Суурь классыг хэрэглэж байгаа хэн ч гэсэн тухайн классаас удамшсан классын объект instance-г ашиглаж байж болно. Суурь классын дизайнерууд удамшсан классад өөрчлөгдөх магадлалтай суурь классын шинжүүдийг таамаглаж байдаг. Жишээ нь машинуудад зориулсан суурь класс нь машин нь пургон юмуу дээвэр нь онгойдог машин байх тохиолдолд өөр байх шинжүүдийг агуулж байдаг. Суурь класс нь энэхүү классын гишүүдийг virtual гэж тэмдэглэж болох ба тэгснээр пургон болон дээвэр нь онгойдог машинуудыг төлөөлсөн удамшсан класс нь тухайн шинж чанарыг өөрсөддөө тааруулан дахин тодорхойлж болно.
Суурь классаас класс удамшуулахад удамшсан класс нь суурь классынхаа бүх л method, field, properties болон event-уудыг удамшуулан авдаг. Суурь классын өгөгдөл болон үйлдлийг өөрчлөх хоёр боломж байгаа. Нэг нь суурь классын гишүүнийг шинэ гишүүнээр орлуулж, replace хийж болох ба нөгөө нь суурь классын virtual гишүүнийг дахин тодорхойлж болно.
Суурь классын гишүүнийг new гэсэн түлхүүр үг ашиглан сольдог. Хэрвээ суурь класс нь method, field, property тодорхойлж өгсөн new гэсэн түлхүүр үг нь эдгээр method, field, property-н шинэ тодорхойлолт үүсгэхэд хэрэглэгддэг. new түлхүүр үг нь солигдож байгаа буцах классын гишүүний буцах төрлийн өмнө бичигддэг .Жишээ нь:

public class BaseClass
{
public void DoWork() { }
public int WorkField;
public int WorkProperty
{
get { return 0; }
}
}

public class DerivedClass : BaseClass
{
public new void DoWork() { }
public new int WorkField;
public new int WorkProperty
{
get { return 0; }
}
}
Delegate

Delegate-г функцийн заагч хэмээн ойлгож болно. Програмыг кодчилон хөгжүүлж байх үед чухам аль функц дуудагдах нь мэдэгдэхгүй,харин програм ажиллах үед функцыг сонгох тохиолдолд delegate-г хэрэглэгдэнэ. Delegate нь delegate-н класс,энэ классын объект гэсэн хоёр хэсгээс тогтоно. Delegate-н классыг зарласны дараа энэ классын объектыг үүсгэж болох ба үүнийг функц дуудах,хадгалахад хэрэглэж болно. Delegate төрөл доорх 3 төрлийн мэдээллийг агуулж байдаг: дуудагдах функцийн нэр, энэ функцийн аргумент, энэ функцийн буцаах утга.
Delegate дээр дурдсан мэдээллийг агуулж,үүссэн л бол ажиллах явцдаа заагч(pointer)-аа дууддаг. Delegate үүсгэхэд delegate түлхүүр үгийг хэрэглэнэ. Delegate-н нэр юу ч байж болох ч энэ delegate-г заах функцийн доторхтой давхцаж байх ёстой. Одоо delegate-г ашигласан жишээ авч үзье.

using System;
public class SamplesDelegate {

// Declares a delegate for a method that takes in an int and returns a String.
public delegate String myMethodDelegate( int myInt );
// Defines some methods to which the delegate can point.
public class mySampleClass {
// Defines an instance method.
public String myStringMethod ( int myInt ) {
if ( myInt > 0 )
return( "positive" );
if ( myInt < 0 )
return( "negative" );
return ( "zero" );
}

// Defines a static method.
public static String mySignMethod ( int myInt ) {
if ( myInt > 0 )
return( "+" );
if ( myInt < 0 )
return( "-" );
return ( "" );
}
}

public static void Main() {

// Creates one delegate for each method. For the instance method, an
// instance (mySC) must be supplied. For the static method, use the
// class name.
mySampleClass mySC = new mySampleClass();
myMethodDelegate myD1 = new myMethodDelegate( mySC.myStringMethod );
myMethodDelegate myD2 = new myMethodDelegate( mySampleClass.mySignMethod );

// Invokes the delegates.
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 5, myD1( 5 ), myD2( 5 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", -3, myD1( -3 ), myD2( -3 ) );
Console.WriteLine( "{0} is {1}; use the sign \"{2}\".", 0, myD1( 0 ), myD2( 0 ) );
}
}

Үр дүн нь:
5 is positive; use the sign "+".
-3 is negative; use the sign "-".
0 is zero; use the sign "".

Abstract

Abstract гэдэг нь хийсвэр гэсэн Англи үг. Хийсвэр, ерөнхий класс учраас бодитоор хэрэглэх боломжгүй. Тийм учраас хийсвэр классыг түүнийг удамшуулж хэрэглэдэг. Abstract modified-г класс, method, properties, indexer болон үзэгдлүүдтэй хамт хэрэглэж болно. Abstract modifier классын тодорхойлолтонд тухайн класс нь бусад классуудын суурь класс байна гэдгийг зааж өгөхийн тулд хэрэглэдэг. Abstract гэж тэмдэглэгдсэн гишүүн, эсвэл abstract классын гишүүн бол тэд abstract классаас үүсж байгаа классаар implement хийгдэх боломжтой.
Энэ жишээнд Square гэх класс нь Area-г implementation хийхэд туслах зорилготой, учир нь энэ ShapesClass-аас үүссэн.

abstract class ShapesClass
{
abstract public int Area();
}
class Square : ShapesClass
{
int x, y;
// Not providing an Area method results
// in a compile-time error.
public override int Area()
{
return x * y;
}
}
Интерфейс

Интерфейс нь зөвхөн method, delegate, event-үүдийн бичлэгүүдийг агуулж байдаг. Method-уудын implementation нь дараах жишээнд харуулсан шиг интерфейсийг implement хийдэг классд хийгддэг.

interface ISampleInterface
{
void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation:
void ISampleInterface.SampleMethod()
{
// Method implementation.
}
static void Main()
{
// Declare an interface instance.
ISampleInterface obj = new ImplementationClass();
// Call the member.
obj.SampleMethod();
}
}

Sunday, April 5, 2009

Windows and OOP

Windows and Object Oriented Programming (OOP)

Энэ танилцуулгаар Windows үйлдлийн систем, түүн дээр програмчлах боломжуудыг объект хандлагат програмчлалын орчинд, нарийвчилбал Microsoft Visual C++ 2008 SDK (Software Development Kit буюу Програм Хангамж Хөгжүүлэлтийн багц)-н орчинд авч үзнэ. Windows үйлдлийн систем маань өөрөө 70 орчим хувь нь С хэл дээр, 30 гаруй хувь нь Assembly хэл дээр бичигдсэн байдаг. Үйлдлийн системийн зах зээлийн 95%-г Windows үйлдлийн систем маань эзэлж байгаа болохоор энэ нь ямар хүчирхэг үйлдлийн систем болох, энэ хүчирхэг үйлдлийн систем дээр програмчлахын чухлыг ойлгоход хялбар байгаа бизээ.

Windows програмчлалын боломжууд

Visual C++ 2008 дээр Windows програм бичих гурван боломж бий. Эдгээрийг дурдвал:

1. Windows API (Application Programming Interface) ашиглан програмчлах. Windows үйлдлийн системийг програмтай буюу хэрэглэгчтэй холбож өгдөг хамгийн доод түвшний програмчлалын арга. Хөгжлийн хувьд аваад үзвэл энэ нь Windows програмчлал дах хамгийн эртний арга гэж үзэж болно.

2. Microsoft Foundation Class буюу MFC ашиглан програмчлах. Энэ нь Windows API-г encapsulate хийдэг багц C++ классууд.

3. Windows Forms-г ашиглан програмчлах. CLR (Common Language Runtime)-тай ажилладаг application хөгжүүлэхэд зориулсан form-based (form дээр суурилсан) хөгжүүлэлтийн механизм.

Эхний Windows API нь бүтцэн програмчлалын аргыг хэрэглэдэг бол дараагийн хоёр объект хандлагат технологи.

1. Windows API

Windows хэрэглээний програм болон Windows үйлдлийн систем хоорондох бүх л харилцаа Windows application programming interface буюу Windows API-г ашигладаг. Windows API нь стандартаар үйлдлийн системд орсон үйлдлийн систем програмтай, програм үйлдлийн системтэй харьцах боломжийг олгосон зуу зуун функцуудаас тогтдог. Windows API нь С++ хэл бий болохоос нилээн өмнө, С хэл хэрэглэгддэг байхад хөгжүүлэгдсэн, тийм учраас үйлдлийн систем, програм хоёрын хооронд өгөгдөл дамжуулахдаа class-аас илүүтэйгээр structure (бүтэц)-г ашигладаг. Тийм учраас энэ програмчлалын арга нь бидний үзэж буй объект хандлагат аргыг хэрэглээгүй, түүний өмнөх бүтцэн програмчлалын аргыг хэрэглэдэг юм байна. Windows API-д бүх л зүйл доод түвшинд ажиллаж байгаа учраас зөвхөн маш их хэмжээний код бичих шаардлагатай байдаг. Ямар ч нэмэлт tool, хэрэгслийг хэрэглэх боломж байдаггүй. Хамгийн доод түвшний програмчлал гэж ойлгож болно. Тийм учраас Windows API дээр програмчлах нь бусад объект хандлагат програмаасаа илүү хүчирхэг, хурдан ажилладаг програмыг хөгжүүлэхэд хэрэглэгддэг. Гэсэн хэдий ч бүх л зүйлийг бичиж, програмчилж байгаа учраас маш их цаг хугацаа, хөрөнгө мөнгө, мэдлэг шаарддаг.

2. MFC

MFC буюу Microsoft Foundation Classes нь урьдчилэн тодорхойлж өгсөн бэлэн классуудын сан буюу цуглуулга юм. Үүн дээр л Visual C++ хэлний Windows програмчлал суурилдаг гэхэд хилсдэхгүй. Эдгээр классууд нь Windows програмчлал дах хамгийн доод түвшний Windows API-уудыг объект хандлагат технологиор encapsulate хийдэг. MFC-н код нь encapsulation, data hiding гэх зарчмууд гарж ирэхээс өмнө бичигдсэн учраас эдгээр зарчмуудыг объект хандлагат технологийн дагуу бүрэн дүүрэн мөрдөж чаддаггүй. Гэсэн хэдий ч MFC дээр бидний гол сэдэв болох Windows ба объект хандлагат технологи маань гарч ирж байна. MFC ашиглан програмчлах процесс нь MFC объектуудыг ашиглах, шинээр үүсгэх, эсвэл MFC-ээс удамшсан объектыг ашиглах аргуудыг хэрэглэдэг. Ерөнхийдөө бол программист Visual C++ тусгай хэрэгслүүдийн тусламжтайгаар MFC-ээс класс удамшуулснаар програмчлах процессыг амар хялбар болгодог. MFC дээр суурилсан объектууд нь Windows-тэй харилцах, Windows message-уудыг боловсруулах, хоорондоо message илгээх гишүүн функцуудыг агуулж байдаг. Мэдээж эдгээр удамшсан классууд нь өөрсдийнхөө гишүүн өгөгдлүүдийг суурь буюу эх классаасаа удамшуулж авдаг. Эдгээр удамшуулсан классууд нь Windows үйлдлийн системийн орчинд ажиллахад шаардлагатай бүх л ажилуудыг хийдэг. Програмист хүний хийх ёстой ажил нь тухайн програмынхаа юу хийхээс хамаараад гишүүн өгөгдөл болон функцуудыг нэмж оруулж өгөх л юм. Мөн MFC-г ашиглан програмчлахад цонхон дээр байрлах control-уудыг бэлэн график хэрэгсэл ашиглан, код бичихгүйгээр зохицуулах боломжтой болсон юм. Ингэснээр програмист зөвхөн тухайн control-н хэрэглэгчтэй хэрхэн харицахыг програмчилж өгөх л ажилтай болж байгаа юм. Гэсэн хэдий ч MFC-г Windows Forms-г ашиглан програмчлахтай харьцуулвал нилээн код бичих шаардлага байдаг. Одоо MFC-н гол шинж чанар, давуу талуудыг авч үзэцгээе:

· Объект хандлагат програмчлалын арга. Өмнөх Windows API нь бүтцэн програмчлалын аргыг хэрэглэдэг бол MFC нь объект хандлагат програмчлалын аргыг хэрэглэснээр Windows програмчлалд хувьсгал болж чадсан юм.

· Windows API-г encapsulate хийж өгдөг. Windows API-н кодыг бичих ямар ч шаардлагагүй болж байгаа учир нь MFC-н классуудад эдгээр кодуудыг агуулсан байгаа учраас шууд удамшуулаад хэрэглэж болно.

· Функцууд болон өгөгдлийн нэрсийн давхацлыг үгүй болгосон.

· Класс доторх код болон өгөгдлийн encapsulation

· Объеъкт хандлагат технологийн гол зарчим болох удамшилыг ашигласнаар дэвшилт болж байгаа юм.

· Сайн зохион байгуулагдсан классын сангуудын ачаар програмын кодны хэмжээ багасдаг.

· 200 илүү классуудтай.

· Hungarian тэмдэглэгээг хэрэглэдэг. Жишээ нь сан дах бүх л классууд С-ээр эхэлсэн байдаг. Мөн энэ зарчмыг гишүүн өгөгдлүүд, функцуудад хэрэглэдэг.

3. Windows Forms

Windows Forms програмчлалын арга та бидний сайн мэдэх C# хэлний хөгжүүлэлтийн арга юм. Бид цонх буюу form дээр юу байхыг бэлэн график хэрэгсэл ашиглан зохиомжилдог. Windows Forms-г ашиглах нь одоогоор програм хөгжүүлэхэд хэрэглэгддэг хамгийн хурдан, хамгийн амархан арга юм. Учир нь бэлэн график хэрэгслийг ашиглан програмчилснаар нөгөө хоёр програм бичих аргыг бодвол бичих ёстой кодыг маш их багасгаж өгдөг юм. Windows Forms application-н код нь мөн CLR (Common Language Runtime)-тай хамт ажиллах болсноороо давуу талтай юм. Windows form нь System::Windows::Forms::Form-н дэд классаар encapsulate хийгддэг ба бүх л кодыг автоматаар үүсгэдэг. Энэхүү арга нь объект хандлагат технологи дээр суурилсан арга.

Хэрхэн Windows Forms-г эхлүүлж ажиллах вэ:

Visual C++ -> Project Type-н CLR-г нь сонгоод, Templates-ээс Windows Forms Application-г сонгон project-н нэрээ өгснөөр ашиглах боломжтой.