Display thumbnails for pdf files in IOS

Create Thumbnail from pdf file

- (UIImage *)imageFromPDFWithDocumentRef:(CGPDFDocumentRef)documentRef {
    CGPDFPageRef pageRef = CGPDFDocumentGetPage(documentRef, 1);
    CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox);

    UIGraphicsBeginImageContext(pageRect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, CGRectGetMinX(pageRect),CGRectGetMaxY(pageRect));
    CGContextScaleCTM(context, 1, -1);  
    CGContextTranslateCTM(context, -(pageRect.origin.x), -(pageRect.origin.y));
    CGContextDrawPDFPage(context, pageRef);

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return finalImage;
}

// Resize Thumbnail
- (UIImage *)image:(UIImage*)originalImage scaledToSize:(CGSize)size
{
    //avoid redundant drawing
    if (CGSizeEqualToSize(originalImage.size, size))
    {
        return originalImage;
    }
    
    //create drawing context
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
    
    //draw
    [originalImage drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
    
    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    //return image
    return image;
}

 

How to Use

NSString *pdfpath = [documentsDirectory stringByAppendingPathComponent:[filePathsArray objectAtIndex:indexPath.row]];
NSURL* pdfFileUrl = [NSURL fileURLWithPath:pdfpath];
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithURL((CFURLRef)pdfFileUrl);
UIImage *pdfthumb = [self imageFromPDFWithDocumentRef:pdf];

cell.imageView.image = [self image:pdfthumb scaledToSize:CGSizeMake(40, 40)];

ตามนี้เลย

UIColor Macros

ในการเขียน code Objective-C การกำหนดค่าสี นั้นค่อนข่างยุ่งยาก เราสามารถทำให้ง่ายขึ้นได้โดย

#define RGB(r, g, b)
[UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1]
#define RGBA(r, g, b, a)
[UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

การนำไปใช้

// Code with macro
msgLabel.textColor = RGB(255, 251, 204);

เริ่มต้นใช้งาน Facebook SDK สำหรับ iOS v3.1

แปลแบบกากๆ นะจ๊ะ

1. Install the Prerequisites

You need Xcode 4.5, and optionally, Git

OS X is required for all iOS development. If you’re completely new to iOS development, you’ll need Xcode installed on your Mac too. It’s available through the App Store.

2. Install the Facebook SDK for iOS

Download and install the Facebook SDK for iOS

Download the SDK here and install the package. The default install location is ~/Documents/FacebookSDK.

Source code for the SDK is also available on GitHub, and if you have Git installed, you can create a local repository by cloning it to a location of your choice:

git clone git@github.com:facebook/facebook-ios-sdk.git FacebookSDK 

This allows you to keep the SDK up-to-date by simply pulling new commits to the repo.

Note that when building the SDK from source, you must first run scripts/build_framework.sh before compiling and running the samples.

3. Run the Samples

Try the sample projects in the Samples folder of the installed SDK

The SDK includes a number of samples, each of which demonstrates an important part of the SDK and various techniques for building social apps.The following samples are available in the SDK. Simply open the Xcode project files inside each of the folders.

Basic samples

  • ProfilePictureSample: demonstrates non-logged-in usage of the profile picture control
  • FriendPickerSample: demonstrates usage of the native friend picker to choose amongst the user’s friends
  • PlacePickerSample: demonstrates logged-in usage of the place picker control

Feature samples

  • SessionLoginSample: demonstrates detailed login flow using the SDK
  • JustRequestSample: demonstrates logged-in user making single and batched Facebook API requests
  • BooleanOGSample: demonstrates publishing an Open Graph custom action type
  • SwitchUserSample: demonstrates an approach to allow switching between multiple users

Complete samples

  • HelloFacebookSample: an all-round sample that demonstrates profile access, status updates and photo uploading
  • Scrumptious: demonstrates the use of login, requests, pickers, picture uploads, and Open Graph publishing
  • Hackbook: another sample app demonstrating a selection of Graph API calls

4. Create a Facebook App

คุณจะต้องใช้  Facebook App ID ก่อนที่คุณจะสร้างโปรเจคใหม่ด้วย SDK นี้

เริ่มจากให้เข้าไปสร้าง app ใหม่ที่ Facebook App Dashboard, กรอกข้อมูลพื้นฐานสำหรับ app ใหม่ของคุณ
เมื่อสร้างแล้ว ให้สังเกตุว่าจะมี app ID แสดงขึ้นมาที่ด้านบนของหน้าแดชบอร์ดหรือถ้าหากว่าคุณมี app ตัวอื่นที่เคยสร้างไว้อยู่แล้วก็สามารถนำมาใช้ได้เลยตอนนี้คุณต้องการที่จะกำหนดค่า Bundle Identifier และ ตั้งค่า Facebook application ให้ support การ login จาก iOS application.(Note: นี่เป็นขั้นตอนใหม่ใน Facebook SDK for iOS v3.1.รุ่นก่อนหน้านี้ของ SDK ไม่จำเป็นต้องทำขั้นตอนนี้.)คลิกที่เครื่องหมายถูกที่อยู่หน้า “Native iOS App” และนำ Bundle Identifier ของapplication ของคุณมาใส่ที่ช่อง “Bundle ID” หลังจากนั้นดูใช้แน่ใจว่า Facebook Login ถูกตั้งค่าให้เป็น “Enabled”

คุณสามารถหาหรือกำหนดค่า Bundle Identifier ใน Xcode ที่ Project tab

5. Configure a new Xcode Project

การสร้างโปรเจคใหม่, เพิ่ม Facebook SDK สำหรับ iOS เข้าไปในโปรเจคและการกำหนดค่า Facebook App ID

ใน Xcode, เริ่มต้นด้วยการสร้างโปรเจคใหม่, และเลือก ‘Single View Application’ ที่แสดงในหน้าสร้างโปรเจคใหม่.

กรอก Product name และ Company identifier ตามที่โปรแกรมต้องการ:

การเพิ่ม SDK และ framework ที่ต้องใช้

ให้เพิ่ม Facebook SDK สำหรับ iOS Framework โดยการลากโฟเดอร์ FacebookSDK.framework จาก SDK ที่ได้ installation ไว้ก่อนหน้านี้แล้ว โดยให้โฟเดอร์ FacebookSDK.framework ไปอยู่ในโฟเดอร์ Frameworks ที่อยู่ใน Project Navigator ของ Xcode โปรแกรม

 

Xcode จะแสดงหน้าจอตามในรูปขึ้นมา ให้เลือก ‘Create groups for any added folders’ และ ให้ยกเลิกการเลือก ‘Copy items into destination group’s folder (ถ้าต้องการ)’ โปรแกรมจะไม่ Copy โฟเดอร์ FacebookSDK.framework มาในโปรแกรมของเราแต่จะใช้การอ้างอิงไปยังตำแหน่งของโฟเดอร์

เพิ่ม iOS resource bundle โดยลากไฟล์ FacebookSDKResources.bundle จาก FacebookSDK.framework/Resources ให้เข้าไปที่โปรแกมโดยให้อยู่ในโฟเดอร์ Frameworks ที่อยู่ใน Project Navigator ของ Xcode โปรแกรม

 

จากนั้นให้เลือก ‘Create groups for any added folders’ และ ให้ยกเลิกการเลือก ‘Copy items into destination group’s folder (ถ้าต้องการ)’ โปรแกรมจะไม่ Copy โฟเดอร์ FacebookSDK.framework มาในโปรแกรมของเราแต่จะใช้การอ้างอิงไปยังตำแหน่งของโฟเดอร์

นอกจากนี้คุณยังสามารถเพิ่ม FBUserSettingsViewResources bundle ในลักษณะเดียวกัน ถ้าคุณคาดหวังที่จะใช้ controller ใน app ของคุณ

ใน SDK นั้นอาศัย frameworks อื่น ๆ อีกสามตัว (AdSupport, Accounts and Social) ที่จะใช้ร่วมกับ Facebook feature ที่สร้างใน iOS 6. เพื่อเพิ่ม frameworks เหล่านี้, ให้ไปที่ ‘Linked Frameworks and Libraries’ ซึ่งจะอยู่ในหน้าจอ target’s Summary (ให้เลือนลงมาหน่อยนึงจะเห็นเอง) จากนั้นให้คลิกที่ปุ่ม ‘plus’ สำหรับเพิ่ม frameworks เข้าไป:

Note: คุณควรใช้เลือก ‘Optional’ สำหรับ iOS6 ในการเจาะจงที่จะใช้ frameworks หากคุณต้องการให้ app ของคุณยังสามารถ build ใน operating systems version ที่เก่ากว่าได้.

เมื่อเสร็จแล้ว Project Navigator ของคุณจะดูคล้ายๆ แบบนี้:

การเพิ่ม SQLite

ถัดไปคุณจะต้องเพิ่ม ”-lsqlite3.0” SQL library ในรายการของ build dependencies ที่อยู่ในหน้าจอ Build Settings โดยให้เลือกที่แท๊บ Build Settings ที่เมนูใต้แท๊บให้เปลี่ยนจาก Basic เป็น All เปลี่ยนจาก Combined เป็น Levels จากนั้นให้ Search หา “Other Linker Flags” แล้วเพิ่ม “-lsqlite3.0” เข้าไปตามรูปด้านล่าง

การเพิ่ม Facebook App ID ของคุณ

ขั้นตอนสุดท้าย คุณต้องใส่ Facebook app ID เข้าไป 2 ที่ในไฟล์ .plist หลักของโปรแกรม. ให้สร้างคีย์ FacebookAppID มี Type เป็น string และเพิ่ม app ID เข้าไป:

เช่นเดียวกัน, สร้าง array key ที่ชื่อว่า URL types โดยให้มี array ด้านในอีกหนึ่งตัว ให้ตั้งชื่อว่า URL Schemes. เพิ่ม item ใน array ที่ชื่อว่า URL Schemes ใส่ค่า app ID ที่ด้านหน้าของใส่คำว่า fb ไว้ด้านหน้า ดังตัวอย่างในรูป:

(This is used to ensure the application will receive the callback URL of the web-based OAuth flow.)

IOS: Add UISegmentedControl to a navigation bar

– (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UISegmentedControl *segmentSelector = [[UISegmentedControl alloc] initWithItems:segControlItems];
segmentSelector.segmentedControlStyle = UISegmentedControlStyleBar;
segmentSelector.momentary = NO;
[segmentSelector addTarget:self action:@selector(actionSegmentedIndexChanged:) forControlEvents:UIControlEventValueChanged];
[segmentSelector setWidth:40.0 forSegmentAtIndex:0];
[segmentSelector setWidth:40.0 forSegmentAtIndex:1];

UIBarButtonItem *segButton = [[UIBarButtonItem alloc] initWithCustomView:segmentSelector];
self.navigationItem.rightBarButtonItem = segButton;
}

– (void) actionSegmentedIndexChanged:(id)sender
{
NSLog(@”selectedSegmentIndex: %d”, segmentSelector.selectedSegmentIndex);

}

IOS: get UnixTimeStamp


- (NSTimeInterval)getUnixTimeStamp
{
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate:[NSDate date]];

return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];
}

Creating an iOS Facebook SDK Static Library With ARC

เริ่มจาก Create Project โดยเลือก View-based Application project template

จากนั้นให้ Run Command ที่่ Terminal

user:~ mac$ cd /Users/path/to/XCodeProject/FBTest
user:FBTest mac$ facebook-ios-sdk/scripts/build_facebook_ios_sdk_static_lib.sh

ถ้าไม่มีอะไรผิดพลาดจะมีข้อความขึ้นมาว่า

** BUILD SUCCEEDED **

Step 2 : Remove older SDK Directory
Step 3 : Create new SDK Directory Version
Step 4 : Create combine lib files for various platforms into one
Step 5 : Copy headers Needed
Step 6 : Copy other file needed like bundle
Finished Universal facebook-ios-sdk SDK Generation

You can now use the static library that can be found at:

/Users/path/to/XCodeProject/FBTest/facebook-ios-sdk/lib/facebook-ios-sdk

Just drag the facebook-ios-sdk directory into your project to include the Facebook iOS SDK static library

หลังจากนั้นให้ลาก Folder /Users/path/to/XCodeProject/FBTest/facebook-ios-sdk/lib/facebook-ios-sdkเข้าไปที่ X-Code เหมือนกับในรูป

หลังจากนั้นให้เข้าไปเพิ่ม libfacebook_ios_sdk.a เข้าไปใน  XCode โดยเลือกที่ Tab Build Phases->Link Binary With Libraries
กดที่ตุ่มเครื่องหมายบวก(+) จากนั้นเลือก Add Other แล้วเลือกไฟล์ libfacebook_ios_sdk.a จาก Folder facebook-ios-sdk ผลที่ได้จะเป็นแบบในรูปด้านล่าง

จากนั้นให้ เพิ่ม ${SOURCE_ROOT}/facebook-ios-sdk ในส่วน Header Search Paths ที่ Config แล้วจะได้ผลแบบในรูปด้านล่าง

ตอนนี้เราได้จัดการในส่วนการเตรียม iOS Facebook SDK Static Library เรีบยร้อยแล้ว

การเรียกใช้

ให้ลอง #import “FBConnect.h” เข้าไปที่ Project ถ้าไม่ Error ก็แปลว่า สำเร็จแล้วในขึ้นแรก

ส่วนการ Implement ต่อจากนี้ดูข้อมูลเพิ่มเติมได้ที่ https://developers.facebook.com/docs/mobile/ios/build/#sdk ในส่วน Modify the application delegate header file

ARC error when declaring delegate ivar

With ARC and iPhone Simulator 5.0 the following seems to work just fine (no warnings, etc…):

SomeObject.h

@class SomeObject;
@protocol SomeObjectDelegate <NSObject> 
- (void)someObjectDidFinishDoingSomethingUseful:(SomeObject *)object; 
@end
@interface SomeObject : NSObject {
__unsafe_unretained id <SomeObjectDelegate> _delegate;
 }
@property (nonatomic, assign) id <SomeObjectDelegate> delegate; 
@end 


SomeObject.m

#import "SomeObject.h" @implementation SomeObject @synthesize delegate = _delegate; @end

Basic Objective-C

 

IBOutlet
IBOutlet เป็นการประกาศให้ IB ( interface builder ) รับรู้ว่า ตัวแปรนี้ สามารถเชื่อมต่อเข้ากับ Object ใน nib , xib ได้ พูดอีกในทางหนึ่งได้ว่า IBOutlet จะเป็นตัวแทนของ Object ที่เราได้ออกแบบใน IB นั่นเอง

 

IBAction
เมื่อเราต้องการให้ Control ต่างๆใน interface builder สามารถตอบสนองต่อ action ได้ เราต้องประกาศ method ให้เป็น IBAction ยกตัวอย่างว่า ถ้าเราจะเขียนว่า กดปุ่มแล้วให้ไปเรียกใช้ method นี้ เราต้องประกาศใน method ให้เป็น IBAction โดยปกติแล้ว การประกาศ IBAction จะรับ parameter เป็น id

 

Delegate
คือ object ที่ทำหน้าที่เสมือนตัวแทนของ object อื่น เหมือนเวลาเราไปกินข้าวนอกบ้าน สมมติว่าเราอยากกินข้าวผัด เราก็อาจจะไปสั่งให้พ่อครัวทำให้เรา หรือเราก็สั่งข้าวผัดจากพนักงาน พนักงานก็จะไปบอกคนทำเก็บเงินว่าเราสั่งรายการอะไรไป และก็เดินไปบอกพ่อครัวอีกทีว่าให้ทำข้าวผัด สุดท้ายก็ได้ข้าวผัดมาเหมือนกัน เช่น

Obj A———————>Obj B

Obj A——Delegate—–>Obj B

ในการเขียน Program ด้วย Cocoa มีการใช้ delegate instance เป็นลักษณะของ Helper Object โดยจุดประสงค์หลักๆคืิอ เพื่อให้ class ที่ inherit ไปนั้นสามารถเพิ่มเติมและแก้ไขการตอบสนองต่อ event ได้ง่ายขึ้น ยกตัวอย่างเช่นว่า ในการ close window เมื่อ event เกิดขึ้น object ต่างๆที่อยู่บน window นั้นมีข้อจำกัดในการรับรู้ว่า ส่วนอื่นๆมีการเปลี่ยนแปลงหรือไม่

 

การเขียน Class
การเขียน class ในภาษา objc นั้นจะแบ่งออกเป็น สามส่วนหลักๆคือ

  1. interface
  2. implement
  3. program

interface
การประกาศ class นั้นจะเริ่มด้วย @interface แล้วก็ตามด้วยชื่อของ classname และสำหรับ :parentClassname นั้นก็เป็นส่วนที่บอกว่า class นี้สืบทอด (inheritance) มาจาก class ไหน ในส่วนของ data member นั้นจะประกาศภายในเครื่องหมาย { และ } ส่วน function จะทำการประกาศ ข้างนอก { } และปิดท้ายด้วย @end

 

Sending Message
สำหรับ ภาษา objective-c นั้นจะทำการเรียก function หรือว่า method ว่าเป็นการส่ง message ไปให้มัน ซึ่งรูปแบบก็คือ

[receiver message];

ซึ่งถ้าเทียบกับภาษา C/C++ ก็จะได้ประมาณว่า

receiver->message();

เหมือนเราต้องการจะให้ receiver นั้นทำอะไร เราก็ต้องบอกให้มันทำให้เรานั่นเอง

ขออธิบายในส่วนของ main program กันก่อนละกัน

Book *scibook;
scibook = [Book alloc];
[scibook init];

เราเริ่มประกาศตัวแปร scibook ให้เป็น pointer ของ Book และทำการส่ง message ที่ชื่อว่า alloc ไปให้ Book เพื่อทำการจอง memory แล้วหลังจากการจองแล้ว ก็ยังไม่สามารถใช้ได้เลย ต้องทำการ initialize มันซะก่อน ด้วยการส่ง message บอกให้ init อีกที

ปล. initialize คือการให้ค่าเริ่มต้นสำหรับตัวแปรต่างๆ เพราะว่าในการจอง memory นั้น พื้นที่ที่โดนจองอาจจะมีค่าต่างๆที่หลงเหลือจากโปรแกรม อื่นๆ เราก็ต้องปัดกวาด พื้นที่ตรงนั้นให้มันพร้อม เสียก่อน

สำหรับ บรรทัดต่อมา เป็นการรวมสองบรรทัดเข้าด้วยกันเลย ก็จะได้ว่า

Book *mathbook = [[Book alloc] init];

เมื่อเรามี object แล้วก็สามารถเรียกใช้ function โดยการส่ง message ไปให้ object เช่น

[mathbook setID: 1];

 

Inheritance (การสืบทอด)
สำหรับหัวข้อนี้จะกล่าวถึงรายละเอียดต่างๆเกี่ยวกับ Inheritance (การสืบทอด) ว่ามันคืออะไรและมีความสำคัญยังไง ตั้งแต่พื้นๆก่อนเลยละกัน ก่อนอื่นมาทำความเข้าใจ ของความหมาย ของคำว่า

Root class
ความหมายของ root คือ class ที่ไม่มี parent หรือหมายความง่ายๆว่ามันไม่ได้ไปสืบทอดใคร
Parent class
ส่วน parent นั้นก็คือ class ที่เป็นต้นแบบของ class อื่นๆ และตัว parent เองก็อาจจะสืบทอดคนอื่น(child) มาอีกทีก็ได้
Child class
เป็นการเรียก class ที่สืบทอดมาจากคนอื่น
เพื่อความเข้าใจง่ายๆ ยกตัวอย่าง เรื่องของสัตว์มาประกอบ ก็แล้วกันน่ะสัตว์ทั้งหมดในโลก ขอเรียกว่า เป็น Animal ทั้งหมดเลยแล้วกัน แล้วสัตว์ต่างๆ ก็อาจจะแบ่งออกได้เป็น Mammal ( สัตว์เลี้ยงลูกด้วยนม ) และ Fish ( ปลา ) และ ถ้าในบรรดาเหล่า Mammal ก็มี Dog ซึ่งเป็นสัตว์ชนิดหนึ่งเหมือนกัน
เพื่อความเข้าใจง่ายๆ ดูภาพประกอบ

อธิบายตามภาพ

Animal เป็น Root Class
คลาสที่ต่อออกมาจาก animal ก็คือ mammal ( สัตว์เลี้ยงลูกด้วยนม ) ดังนั้น parent class ของ mammal ก็คือ Animal
Fish เป็น class ที่สืบทอดมากจา animal พูดง่ายๆว่าเป็น child ของ animal และก็แน่นอนว่า Fish มี parent class คือ animal เช่นเดียวกัน
และสุดท้าย mammal มี child class ที่ชื่อว่า dog และในทางกลับกัน dog ก็จะมี parent class เป็น Mammal
ถ้าหากเราให้คุณสมบัติของ class ต่างๆ เช่นว่า

animal เป็นสิ่งมีชีวิตที่ต้องกินอาหาร
mammal เลี้ยงลูกด้วยนม
fish หายใจในน้ำได้

นั่นก็แปลได้ว่า dog นั้นเป็นสิ่งมีชีวิตที่ต้องกินอาหาร ( สืบทอดจาก animal ) และเป็นสัตว์เลี้ยงลูกด้วยนม ( สืบทอดจาก mammal ) แต่ไม่อาจจะหายใจในน้ำได้เพราะไม่ได้สืบทอดมาจาก Fish

เราลองมาเขียน class จากแผนภาพในแบบง่ายๆกัน

// animal class
@interface Animal
{
string name;
}
– (void) eat;

จาก code ข้างบน ประกาศ class ชื่อว่า animal โดยมี ตัวแปรเป็น string เอาไว้เก็บชื่อของสัตว์ตัวนี้ และสัตว์ต่างๆก็ต้องการ การกินอาหาร เลยประกาศ method ชื่อว่า eat ขึ้นมา

// Mammal.h
@interface Mammal :Animal
{
int blood_temperature;
}
– (void) feedMilk;

แล้วก็ประกาศ class ชื่อว่า mammal ขึ้นมา โดยสืบทอดมาจาก animal และก็เพิ่ม method ชื่อว่า feedMilk เข้าไป จากตรงนี้ Mammal ก็จะสามารถเรียกใช้ method ของ animal ได้ด้วย นั่นก็คือ eat นั่นเอง และส่วนตัวของ mammal เองก็มี method ของตัวเองที่ชื่อ feedMilk ด้วย

// dog.h
@interface Dog :Mammal
{
}
– (void) bite;
– (void) run;

สุดท้ายที่เราประกาศก็คือ dog โดยเพิ่ม method เข้ามาอีกสองอันนั่นก็คือ bite กับ run

สรุปได้ว่า ตอนนี้ dog นั้นสามารถ eat , feedMilk , bite , run ทำได้ทั้ง 4 อย่างเลย
จะเห็นได้ว่า inheritance นั้นมีประโยชน์มาก เพราะว่าเราสามารถ สร้าง class ใหม่ขึ้นมาได้ จาก class ที่มีอยู่แล้ว ทำให้เราลดเวลาการเขียนโปรแกรมลงได้ได้เยอะมาก และเป็นส่วนสำคัญสำหรับ การเขียนโปรแกรมในแบบ OOP ( Object Oriented Programming )

 

Polymorphisms
Polymorphisms สรุปง่ายๆว่าเป็นการอนุญาติให้ derived class ( child class ) สามารถใช้ function ของ parent ได้ สำหรับ polymorphisms นั้นเห็นเด่นชัดมากที่สุดก็คงจะเป็น Overriding / Overloading

Overriding
เป็นการเขียน function ของ Child class ใช้เองโดยไม่ต้องใช้ function ของ Parent Class ถ้าจะยกตัวอย่างง่ายๆ ก็เป็นต้นว่า ถ้าเรามี class ชื่อว่า Car แล้ว Car นั้นมีฟังชั่นขื่อว่า drive สมมติว่าเราจะเขียน class ใหม่ขึ้นมาโดยสืบทอด (inherit) มาจาก Car โดยชื่อว่า Tank มีฟังชั่นชื่อว่า drive เหมือนกัน แต่ว่า class ทั้งสองนั้น Drive ทำงานไม่เหมือนกัน คือพูดง่ายๆว่า รถยนต์ก็ ขับ(drive)ได้ รถถังก็ ขับ(drive) ได้ แต่วิธีการที่จะขับไม่เหมือนกัน
Overloading
เป็นการเขียน Function ชื่อเหมือนกัน ใน class เดียวกัน แต่รับ parameter คนละอย่างกัน เช่นว่า เรามี class ชื่อว่า Rectangle และมี function ในการคำนวนพื้นที่ เราอาจจะต้องการให้มันรับ parameter ได้ทั้ง int และ float ในลักษณะแบบนี้เราก็จะใช้ overloading เข้ามาให้เกิดประโยชน์
อาจจะงง เล็กน้อย สรุปสั้น Overriding ก็คือ child class ที่มีการเขียน function ที่ชื่อเหมือนกับ parent ขึ้นมาเองโดยไม่ต้องสืบทอดจาก parent และ Overloading คือ method ที่สามารถรับ parameter ได้หลายๆรูปแบบ

อ่าน Polymorphisms เพิ่มเติมได้จาก macfeteria/Polymorphisms

 

Dynamic Binding
คือการเพิ่มความสามารถให้ Class หนึงให้มีความสามารถ(Method)เหมือนกัยอีก Class

อ่าน Dynamic Binding เพิ่มเติมได้จาก macfeteria/Dynamic Binding

 

Super Self – Initializing
super เป็น keyword ที่เอาไว้อ้างอิงถึง คลาสที่สืบทอดมา
self ก็คือเป็นการอ้างอิงถึงตัวเอง
เอาละทีนี้ก็คือว่า มันมีความสำคัญอะไรกับ 2 สิ่งนี้ สำหรับ self กับ super
จริงๆแล้ว self กับ super ส่วนมากจะได้ใช้จริงๆ กับ initial ซะส่วนมาก คือหลังจากการ alloc แล้วเราต้องทำการ init ให้มัน ทีนี้มันก็เกิดปัญหาที่ว่า ถ้าที่เราเขียน class ที่เป็น child จาก parent ที่ต้องการ initial ก่อนใช้งาน แล้วจะทำอย่างไร ?

อ่าน Super Self – Initializing เพิ่มเติมได้จาก macfeteria/Super Self – Initializing

ที่มา: macfeteria