Ban đầu hệ điềuhành này chỉ được phát triển để chạy trên Iphone, nhưng sau đó nó đã được mởrộng để chạy trên các thiết bị của Apple như iPod touch, iPad và Apple TV.Ngày 31 tháng 5, 2
Trang 1LỜI CẢM ƠN
Lời đầu tiên, em xin chân thành cảm ơn trường Đại học Công nghệ thôngtin và truyền thông, Đại học Thái Nguyên đã tạo điều kiện thuận lợi cho phép emhoàn thành đồ án này
Em xin chân thành cảm ơn sự giúp đỡ và đóng góp ý kiến nhiệt tình củacác thầy - cô giáo trong bộ môn Công Nghệ Phần Mềm - Khoa Công NghệThông Tin- Đại học Công Nghệ Thông Tin và Truyền Thông - Đại Học TháiNguyên
Đặc biệt em xin bày tỏ lòng cảm ơn sâu sắc nhất đến cô giáo hướng dẫn:
Th.S Nguyễn Lan Oanh, đã nhiệt tình giúp đỡ em trong suốt quá trình học tập
và nghiên cứu
Em xin chân thành cảm ơn!
Sinh viên Nguyễn Văn Sơn Tháng 6/2012
Trang 2LỜI CAM ĐOAN
Em xin cam đoan những kết quả trong đồ án “TÌM HIỂU NGÔN NGỮ LẬP
TRÌNH OBJECT-C VÀ XÂY DỰNG ỨNG DỤNG TRÊN NỀN TẢNG IOS” là sự nghiên
cứu của em, không sao chép của ai Nội dung đồ án có tham khảo, sử dụng tàiliệu, thông tin từ một số nguồn khác được trích dẫn trong phần tài liệu thamkhảo, và một số website Nếu có gì giả dối em xin hoàn toàn chịu trách nhiệm
Tác giả đồ án Nguyễn Văn Sơn
Trang 3MỤC LỤC
DANH MỤC HÌNH ẢNH
Trang 4TỔNG QUAN
1 Sơ qua tình hình nghiên cứu trong và ngoài nước
Trong xu thế phát triển nhanh chóng của CNTT, lập trình ứng dụng chothiết bị di động không còn xa lạ với chúng ta Tuy nhiên lập trình ứng dụng trên
hệ điều hành IOS (hay cụ thể là cho chiếc điện thoại Iphone ) lại là một hướng đikhá mới mẻ với những lập trình viên ở Việt Nam nói chung và trên thế giới nóiriêng
Ngày 17/10/2007, Tổng Giám đốc Apple, Steve Jobs, tuyên bố hãng nàysẵn sàng chào đón các hãng phần mềm thứ ba phát triển ứng dụng cho Iphone.Đây là cú ngoặt lịch sử của Apple vì trước đó hãng này muốn kiểm soát những gìngười dùng có thể cài và chạy trên điện thoại Iphone Đây cũng là cánh cở mới
mở rộng cho các nhà lập trình và phát triển phần mềm ứng dụng trên thiết bị didộng
IOS là hệ điều hành trên các thiết bị di động của Apple Ban đầu hệ điềuhành này chỉ được phát triển để chạy trên Iphone, nhưng sau đó nó đã được mởrộng để chạy trên các thiết bị của Apple như iPod touch, iPad và Apple TV.Ngày 31 tháng 5, 2011, App Store của Apple chứa khoảng 500.000 ứng dụngIOS, và được tải về tổng cộng khoảng 15 tỷ lần Trong quý 4 năm 2010, cókhoảng 26% điện thoại thông minh chạy hệ điều hành IOS, sau hệ điềuhành Android của Google và Symbian của Nokia
2 Tính cấp thiết của đề tài
Sự bùng nổ và phát triển mạnh mẽ của công nghệ đã và đang khiến conngười khó có thể thiếu đi chiếc điện thoại của mình Cùng với sự phát triển đó thìnhững ứng dụng trên di động càng ngày càng trở nên cần thiết Đặc biệt lập trìnhứng dụng trên Iphone (trên hệ điều hành IOS) là một không gian mới hay mộtthử thách mới với những người lập trình bởi nó hoàn toàn xa lạ và có nhiều cơhội cho mọi người thử sức
Phiên bản Iphone đầu tiên ra đời năm 2007 Bên cạnh tính năng của mộtmáy điện thoại thông thường (hoạt động trên băng tần GSM và EDGE), Iphone
Trang 5còn được trang bị màn hình cảm ứng, máy chụp hình, khả năng chơi nhạc vàchiếu phim (tương tự iPod), trình duyệt web,… Phiên bản thứ hai là Iphone 3G ramắt tháng 7 năm 2008, được trang bị thêm hệ thống định vị toàn cầu (GPS),mạng 3G tốc độ cao (HSPDA).
Iphone đã thành công, nổi lên trở thành chiếc điện thoại bán chạy nhấtmọi thời đại: Sau 2 năm, Iphone đã chiếm lĩnh tới 17% thị trường Smartphone,
và thậm chí có lúc bán được hơn 1 triệu chiếc chỉ trong 1 ngày Và apple đã mởcửa, tạo điều kiện để cho đội ngũ lập trình trên toàn thế giới có thể tham gia vàothị trường cung cấp những ứng dụng cho Iphone Apple sẽ chia lại cho các nhàphát triển đến 70% doanh thu Mức chia lợi nhuận này là cao nhất hiện nay trongcác chợ ứng dụng Điều này lý giải một phần nguyên nhân tại sao bắt đầu cónhiều người tham gia phát triển ứng dụng cho App Store
Là sinh viên, khi thực hiện đề tài, tìm hiểu, nghiên cứu về lĩnh vực mớinày, em tin sẽ học hỏi được nhiều kiến thức mới, nhiều kinh nghiệm thiết thựchơn và có thể áp dụng vào thực tế, đem lại hiệu quả trong công việc sau này
3 Mục tiêu của đề tài
Qua thời gian thực hiện đề tài, em tin rằng sẽ nắm được những điểm quantrọng trong hệ điều hành IOS, thu được nhiều kiến thức, kỹ năng và kinh nghiệmtrong việc lập trình ứng dụng trên thiết bị di động Nắm được các yếu tố nền tảng
và phát triển được phần mềm ứng dụng Địa Chỉ Số trên Iphone
4 Phương pháp và phạm vi nghiên cứu
Giờ đây hệ điều hành Mac OS đã có thể chạy trên phần cứng (intel) tuynhiên nó là không phải là 100% chạy cho tất cả các máy tính intel Chỉ một sốkhông nhiều các dòng máy có thể chạy thành công Mac OS Nhờ đó mà ngườilập trình có thể cài đặt Xcode và sử dụng object C Đó chính là cách thức tiếp cậnvới môi trường lập trình ứng dụng cho Iphone của em
Phạm vi nghiên cứu:
- Nghiên cứu về hệ điều hành IOS
- Nghiên cứu ngôn ngữ lập trình object C và bộ công cụ hỗ trợ Xcode
- Nghiên cứu kỹ thuật lập trình trên thiết bị di động Iphone
- Xây dựng các tính năng cơ bản cho ứng dụng Địa Chỉ Số trên iPhone
Trang 6CHƯƠNG 1: TỔNG QUAN VỀ IPHONE VÀ HỆ ĐIỀU
và chiếu phim (tương tự iPod), trình duyệt web, Phiên bản thứ hai là Iphone 3G
ra mắt tháng 7 năm 2008, được trang bị thêm hệ thống định vị toàn cầu (GPS),mạng 3G tốc độ cao (HSDPA)
Iphone 3G S, phiên bản thứ ba, được công bố vào ngày 8 tháng 6 năm
2009 Ngày 19 tháng 6, phiên bản mới này đã được phân phối tại Mỹ, Canada vàmột số nước châu Âu; ngày 26 tháng 6 có mặt tại Úc; sau đó, phiên bản quốc
tế của Iphone 3G S cũng được phát hành vào tháng 7 và tháng 8 năm 2009 Thayđổi đáng kể nhất là trong phiên bản điện thoại mới này là Apple đã nâng cao hiệunăng của máy (S trong 3G S là Speed - Tốc độ).Iphone 3G S được trang bịbộ vi
xử lý tốc độ 600 MHz (gấp gần 1,5 lần so với Iphone 3G), bộ nhớ trong lên đến
32 GB, máy ảnh số 3.15 Mp, tích hợp la bàn số và hàng loạt tính năng đáng giáđược nâng cấp khác như tốc độ Wi-Fi, thời gian dùng pin v.v
Trước đó, ngày 17 tháng 3 năm 2009, Apple cũng đã thông báo phiên bản3.0 của hệ điều hành cho Iphone (và iPod Touch) và đã được ra mắt chính thứcvào ngày 17 tháng 6 năm 2009
Iphone 4 được thông bố ra đời tháng 6 năm 2010.Trong phiên bản nàyIphone đã được thiết kế lại, vuông vắt và có khía cạnh hơn Về chức năng đángchú ý, Iphone 4 có chức năng quay phim HD, màn hình Rétina trong và nhuyễn
Trang 7hơn gấp 4 so với các màn hình đời trước và chức năng FaceTime (gọi và thấyngười gọi qua Wi-Fi
Kể từ khi ra đời, Iphone vẫn luôn làm điên đảo cả thế giới với thiết kế độcđáo và con đường riêng màApple đã chọn.Thành công rực rỡ mà Iphone có đượcđiều khiến cả thế giới phải ngả mũ thán phục.Điểm lại những cột mốc lịch sử củachiếc smartphone mang tính cách mạng này:
Ngày 9/1/2007: Steve Jobs vén tấm màn bí mật của Iphonephiên bản đầu tiên tạiMacworld 2007
Ngày 5/9/2007: Apple quyết định ngừng sản xuất phiên bản 4GB
Ngày 5/2/2008: Phiên bản 16GB chính thức ra đời và bước vào hàng ngũsmartphone của Apple
Ngày 9/6/2008: Tại hội nghị WWĐƯợC, Apple đã giới thiệu Iphone 3G
Ngày 10/7/2008: App Store chính thức mở cửa, với chỉ khoảng 500 ứng dụng Ngày 8/6/2009: Apple tung ra Iphone 3GS và giảm giá bản Iphone 3G xuống chỉcòn một nửa App Store có 50.000 ứng dụng và trên 1 tỉ lượt download
Trang 8Hình ảnh 1-1: Iphone 3GS
Trang 9Ngày 17/6/2009: Apple tung ra IOS 3.0.
Ngày 19/6/2009: Iphone 3GS có mặt tại Mỹ, Canada và 6 quốc gia Châu Âu Ngày 26/6/2009: Iphone 3GS có mặt tại Nhật và Úc
Ngày 4/11/2009: App Store chạm mốc 100.000 ứng dụng và trên 2 tỉ lượtdownload
Ngày 29/4/2010: Lượng ứng dụng tăng lên gấp đôi thành 200.000, trên 2.5 tỉlượt download
Ngày 7/6/2010: Apple giới thiệu Iphone 4
Hình ảnh 1-2: Iphone 4 là một cuộc cách mạng mới trong giới công nghệ
Trang 11Ngày 15/6/2010: Khách hàng có thể đặt mua Iphone 4.
Ngày 24/6/2010: Iphone 4 có mặt tại các nước Mỹ, Anh, Pháp, Đức và Nhật
Hình ảnh 1-3: Biểu đồ thời gian phát triển của Iphone.
Hình ảnh 1-4: Lượng Iphone được bán ra trong 4 năm qua.
1.1.2 Hệ điều hành IOS
Trang 12IOS là hệ điều hành trên các thiết bị di động của Apple Ban đầu hệ điều hànhnày chỉ được phát triển để chạy trên Iphone, nhưng sau đó nó đã được mở rộng
để chạy trên các thiết bị của Apple như iPod touch,iPad và Apple TV Ngày 31tháng 5 năm 2011, App Store của Apple chứa khoảng 500 000 ứng dụng IOS, vàđược tải về tổng cộng khoảng 15 tỷ lần Trong quý 4 năm 2010, có khoảng26% điện thoại thông minh chạy hệ điều hành IOS, sau hệ điều hành Android củaGoogle và Symbia của Nokia
Giao diện người dùng của IOS dựa trên cơ sở thao tác bằng tay Người dùng
có thể tương tác với hệ điều hành này thông qua rất nhiều động tác bằng tay trênmàn hình cảm ứng của các thiết bị của Apple
Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn ra vàotháng 1 năm 2007 và được phát hành vào tháng 9 năm đó Khi đó, hệ điều hànhnày chưa có một cái tên riêng nên chỉ đơn giản là "Iphone chạy OS X" Ban đầu,ứng dụng bên thứ ba không được hỗ trợ Steve Job đã chỉ ra rằng những nhà pháttriển có thể xây dựng các ứng dụng web mà "sẽ cư xử như những ứng dụng banđầu trên Iphone" Vào ngày 17 tháng 10 năm 2007, Apple thông báo một bộ pháttriển phần mềm đang được xây dựng và họ dự định sẽ đưa nó đến "tay của cácnhà phát triển vào tháng 2" Ngày 6 tháng 3 năm 2008, Apple đã phát hành bảndùng thử đầu tiên, cùng với một cái tên mới cho hệ điều hành, đó là "Iphone OS"
Tháng 6 năm 2010, Apple đổi cái tên Iphone OS thành IOS.Nhãn hiệu
"IOS" đã được Cisco dùng để đặt tên cho hệ điều hành của mình.Để tránh các vụkiện cáo, Apple đã xin giấy phép sử dụng nhãn hiệu IOS từCisco.http://vi.wikipedia.org/wiki/IOS_(Apple) - cite_note-ciscosuit-7
Trang 13Hình ảnh 1-5: Lịch sử IOS và các thiết bị được hỗ trợ bởi IOS
1.2 Môi trường phát triển ứng dụng
1.2.1 Cấu trúc của hệ điều hành iOS
Apple không cho phép người dùng tiếp cận trực tiếp với bất kì phần cứngnào của Iphone, mọi tương tác phần cứng phải thông qua một số lớp khác nhaucủa phần mềm, hoạt động như một trung gian giữa các ứng dụng và thiết bị phầncứng Những lớp này được hiểu như là một hệ điều hành, cụ thể ở đây là hệ điềuhành IOS
Mỗi lớp của hệ điều hành cung cấp một mức độ ngày càng cao của sự trừutượng hóa với sự phức tạp của cách làm việc với phần cứng
Trang 14Hình ảnh 1-6: Phân lớp trong hệ điều hành iOS.
Trang 151.2.2 Lớp Core OS( lớp nhân trong)
Là lớp dưới cùng của iOS, nó là nền tảng của hệ điều hành Nó đảm nhiệmcác nhiệm vụ như quản lý bộ nhớ, file hệ thống, liên kết mạng và một số chứcnăng khác, nó tác động trực tiếp tới phần cứng Lớp Core OS bao gồm một sốthành phần như sau:
- CFNetwork Framework: Cung cấp một giao diện dựa trên C tới các lớp
giao thức mạng TCP/IP và truy cập mức thấp tới các socket BSD Nó chophép mã ứng dụng được viết và làm việc với các dịch vụ HTTP, FTP vàDNS, khởi tạo bảo mật và mã hóa các kết nối sử dụng Secure SocketsLayer (SSL) hoặc Transport Layer Security(TLS)
- External Accessory framework: Cung cấp khả năng kết nối với những
phụ kiện kết nối vật lý mở rộng tới Iphone thông qua 30-pin dockconnector hoặc qua Blutooth
- Security Framework: Cung cấp các giao diện bảo mật khi chúng ta kết
nối tới mạng mở rộng bên ngoài như chứng thực, khóa công khai và khóaprivate, mã hóa, và xác thực sử dụng hàm băm (HMAC)
- System (LibSystem): iOS được xây dựng dựa trên nền tảng UNIX, vì thế
những thành phần hệ thống của Core OS cung cấp nhiều chức năng giốngvới hệ điều hành UNIX Nó bào gồm nhân hệ điều hành (Mach Kernel) vàcác Driver của các thiết bị Nhân là nền tảng của toàn bộ iOS được xâydựng và cung cấp giao diện mức thấp cho các phần cứng lớp nằm dưới.Nhân chịu trách nhiệm cấp phát bộ nhớ, quản lý chu kỳ sống của tiếntrình, đầu vào/đầu ra, liên lạc đa tiến trình, quản lý luồng, kết nối mạngmức thấp quản lý luồng và truy cập hệ thống
1.2.3 LớpCore Services (lớp nhân dịch vụ)
Lớp Core Services cung cấp các dịch vụ dựa trên nền tảng của lớp Core OS
Nó cung cấp những truy cập cơ bản tới các dịch vụ của iOS và nó bao gồm cácthành phần sau:
Trang 16- AddressBook Framework: Cung cấp truy cập có thứ tự tới cơ sở dữ liệu
về danh bạ của Iphone, cho phép các ứng dụng có thể lưu trữ và sửa đổicác mục của danh bạ
- Core Data Framework: Được cung cấp để dễ dàng tạo ra các mô hình dữ
liệu và lưu trữ trong các ứng dụng dựa trên Model-View-Controller(MVC) Sử dụng Framework này giảm được số lượng mã cần phải viết đểthực hiện những công việc thông thường khi làm việc với cấu trúc dữ liệutrong ứng dụng
- Core Foundation Framework: Cung cấp các thứ như kiểu dữ liệu, thao
tác trên chuỗi, quản lý khối dữ liệu có thứ tự, thao tác URL, các luồng vàchạy các vòng lặp, thời gian, thao tác XML cơ bản, các cổng và các kếtnối socket
- Foundation Framework: Là một Framework chuẩn của Objective-C Nó
chứa những bao gói Objective-C xung quanh Core FoundationFramework
- Core Location Framework: Cho phép bạn lấy được thông tin về vị trí
hiện thời của thiết bị và có khả năng định hướng Phương thức dùng bởithiết bị để cung cấp tọa độ sẽ phụ thuộc trên dữ liệu có sẵn tại thời gianthông tin được yêu cầu và phần cứng hỗ trợ được cung cung cấp bởimodel Iphone cụ thể mà ứng dụng chạy trên nó Nó sẽ dựa trên việc phântích GPS, dữ liệu mạng Wifi hoặc phép đo tam giác cột thu phát sóng
- Store Kit Framework: Mục đích của phần này là tạo sự dễ dàng trong
việc trao đổi thương mại giữa ứng dụng của bạn và Apple AppStore
- SQLite library: Cho phép lưu trữ cơ sở dữ liệu nhỏ, SQL dựa trên cơ sở
dữ liệu để tạo và thao tác với những cơ sở dữ liệu bên trong ứng dụng
Trang 171.2.4 LớpMedia Services (lớp liên kết)
Lớp Media Services của iOS cung cấp các khả năng về audio, video,animation và graphics Như các lớp khác trong ngăn xếp của iOS, lớp Media baogồm một số các Framework cái mà có thể được sử dụng trong những ứng dụngIphone:
- Core Graphics Framework: Cung cấp một máy dựng hai chiều nhẹ.
Những tính năng của Framework này bao gồm việc tạo và trình diễnnhững file PDF, bản vẽ dựa trên Vector, các lớp trong suốt, đường dẫndựa trên bản vẽ, thao tác và quản lý màu sắc
- Quartz Core Framework: Mục đích của Framework này là cung cấp khả
năng hoạt hình cho Iphone Nó cung cấp nền tảng cho các hiệu ứng trựcquan và hoạt hình được sử dụng bởi Framework UIKit và cung cấp mộtgiao diện lập trình dựa trên Objective-C để tạo hoạt hình đặc biệt bêntrong ứng dụng Iphone
- OpenGL ES Framework: OpenGL for Embedded System(ES) là một
phiên bản nhỏ của OpenGL đầy đủ được thiết kế đặc biệt để dành cho cácthiết bị nhỏ như Iphone
- Iphone Audio Support: cho phép iOS có khả năng hỗ trợ các định dạng
như AAC, Apple Lossless (ALAC), A-law,IMA/ADPCM, Linear PCM,DVI/Intel IMA…
- AV Foundation Framework: Là một Framework được thiết kế cho phép phátlại, ghi âm và quản lý nội dung của âm thanh
- Core Audio Frameworks (CoreAudio.framework, Audio Toolbox.framework và AudioUnit.framework): Cung cấp khả năng
truy cập tới các thiết bị được tích hợp trong các đơn vị xử lý âm thanh
- Open Audio Library (OpenAL): OpenAL là một công nghệ nền tảng lai
tạo được sử dụng để cung cấp hiệu ứng âm thanh 3D chất lượng cao
- Media Player Framework: Framework này có thể chạy các video trong
các định dạng mov, mp4, m4v, 3gp tại một loạt các tiêu chuẩn nén, các
độ phân giải và các tốc độ khung hình
Trang 181.2.5 Lớp Cocoa Touch (lớp tiếp xúc)
Lớp này nằm ở trên cùng trong ngăn xếp của iOS và chứa những Frameworkcái mà được sử dụng thường xuyên bởi các lập trình viên Iphone Cocoa Touchdựa trên nền tảng chuẩn của Cocoa API của MAC OS X và có phần mở rộng vàsửa đổi để phù hợp với Iphone Lớp Cocoa Touch cung cấp các Framework choviệc phát triển ứng dụng Iphone như sau:
- UIKit Framework: Đây là một Framework khổng lồ và một giao diện lập
trình dựa trên Objective-C giàu tính năng Bạn sẽ phải tốn nhiều thiều thờigian làm việc để tìm hiểu về nó Hầu hết các cuốn sách đều viết riêng vềUIKit Framework Một số thành phần chính của UIKit là:
+ Quản lý và tạo giao diện người dùng ( text fields, buttons, labels,colors, fonts…)
+ Quản lý chu kỳ sống của ứng dụng
+ Điều khiển sự kiện ứng dụng (như chạm vào màn hình ứng dụng)
+ Các chức năng Cut, Copy, Paste
+ Quản lý và trình diễn nội dung Web và văn bản
+ Điều khiển dữ liệu
- Map Kit Framework: Cung cấp cho bạn một giao diện lập trình để cho
phép bạn xây dựng bản đồ dựa trên các ứng dụng riêng bản bạn Nó chophép bạn hiển thị bản đồ có thể cuộn tới bất kỳ vị trí nào, hiển thị bản đồtương ứng với vị trí địa lý hiện tại của thiết bị và chú thích theo nhiềucách khác nhau
- Push Notification Service: Cho phép những ứng dụng cảnh báo người
dùng về một sự kiện thậm chí khi ứng dụng hiện tại không được chạy trênthiết bị Nó rất phổ biến được sử dụng bởi các ứng dụng dựa trên tin tức
Trang 19Thông thường khi có tin tức mới thì dịch vụ sẽ tạo ra một tin nhắn trênthiết bị với tiêu để của tin tức và cung cấp cho người dùng tùy chọn để tảicác ứng dụng tin tương ứng để đọc thêm chi tiết Tính năng này lên được
sử dụng tiết kiệm để tránh gây phiền hà cho người sử dụng vì thườngxuyên gián đoạn
- Message UI Framework: Cung cấp mọi thứ mà bạn cần để cho phép
người sử dụng gửi email từ trong ứng dụng của bạn Trên thực tế nó còncung cấp các thành phần giao diện thông qua đó người dùng có thể nhậpcác thông tin địa chỉ email và nội dung tin nhắn Ngoài ra thông tin này cóthể được xác định trước bên trong ứng dụng của bạn và sau đó được hiểnthị cho người sử dụng để chỉnh sửa và phê duyệt trước khi gửi
- Address Book UI Framework: Đưa ra chức năng chính cho Iphone như
là một thiết bị thông tin liên lạc và trợ giúp kỹ thuật số Toàn bộFramework là giành riêng cho việc tích hợp các dữ liệu sổ địa chỉ vàotrong ứng dụng riêng của bạn Cho phép bạn bạn truy cập vào, hiển thị,chỉnh sửa và nhập thông tin liên lạc từ sổ địa chỉ của Iphone từ bên trongứng dụng riêng của bạn
Game Kit Framework: Cung cấp kết nối ngang hàng (peer-to-peer) và kết nốigiọng nói giữa nhiều thiết bị và cho phép nhiều người sử dụng chạy cùng mộtứng dụng để tương tác
Trang 20CHƯƠNG 2: NGÔN NGỮ LẬP TRÌNH OBJECTIVE C VÀ BỘ
CÔNG CỤ HỖ TRỢ XCODE
Objective-C là ngôn ngữ lập trình hướng đối tượng.Nó thêm cách gửithông báo của ngôn ngữ Smalltalk vào ngôn ngữ C Ngày nay Objective-C đượcdùng như ngôn ngữ chính thức cho hệ điều hành Mac OS và iOS
Lịch sử ngôn ngữ Objective-C
Objective-C đã được tạo ra chủ yếu bởi Brad Cox và Tom Love đầunhững năm 1980 tại Stepstone công ty nơi hai ông làm việc Cả hai đã được giớithiệu về Smalltalk trong trung tâm công nghệ lập trình của Tổng công ty ITTnăm 1981.Cox bị hấp dẫn bởi các vấn đề về sử dụng lại đúng trong thiết kế phầnmềm và lập trình.Ông nhận ra rằng một ngôn ngữ như Smalltalk sẽ là vô giátrong xây dựng môi trường phát triển cho các nhà phát triển hệ thống.Cox đã bắtđầu bằng cách thay đổi các trình biên dịch C để thêm một số tính năng củaSmalltalk Ông đã nhanh chóng bổ sung một mở rộng hướng đối tượng cho ngônngữ C
Tom Love đã được thuê bởi Schlumberger nghiên cứu vào năm 1982 và
đã có cơ hội có được phiên bản thương mại đầu tiên của Smalltalk-80, điều nàythêm ảnh hưởng tới sự phát triển của đứa con tinh thần của họ
Cuối cùng Tom Love và Brad Cox hình thành một liên doanh mới (PPI),
để thương mại hóa sản phẩm của họ, mà cùng một trình biên dịch Objective-Cvới các lớp thư viện Năm 1986, Cox công bố bản mô tả chính của Objective-C ởdạng ban đầu của nó trong cuốn sách lập trình hướng đối tượng, một phươngpháp tiến hóa.Mặc dù ông đã cẩn thận chỉ ra rằng có nhiều thứ quan trọng chovấn đề tái sử dụng hơn so với ngôn ngữ lập trình
Sau khi Steve Jobs bị buộc ra khỏi Apple, ông bắt đầu tại công ty mớiNeXT Năm 1988, NeXT được cấp phép Objective-C từ StepStone và phát hànhtrình biên dịch của Objective-C và thư viện của mình, theo đó người dùng sửdụng giao diện và xây dựng dựa trên nền tảng NeXTSTEP Trong khi các máy
Trang 21trạm NeXT không tác động lớn trên thị trường thì các công cụ đã được ca ngợirộng rãi trong công nghiệp phần mềm.NeXT đã giảm sản xuất phần cứng và tậptrung vào các công cụ phần mềm, bán NeXTSTEP (và OpenStep) như là một nềntảng cho các khách hàng lập trình.
Sau khi mua lại NeXT vào năm 1996, Apple Computer sử dụng OpenSteptrong hệ điều hành mới của mình, Mac OS X Điều này bao gồm Objective-C vàObjecive của NeXT-phát triển công cụ dựa trên C, Dự án Builder (sau này đượcthay thế bằng Xcode), cũng như công cụ thiết kế giao diện của nó InterfaceBuilder Phần lớn Api Cocoa của Apple ngày nay có nền tảng là giao diện hướngđối tượng OpenStep, và là môi trường Objective-C có ý nghĩa nhất đang được sửdụng để phát triển
Tổng quan về Objective-C
Objective-C được thiết kế để phục vụ mục đích lập trình hướng đối tượng
Nó hoạt động giống như là một tập hợp các thành phần mở rộng rất mạnh mẽ củangôn ngữ C Objective-C kết hợp các đặc điểm ưu tú nhất của C và ngôn ngữSmallTalk Objective-C khá đơn giản để học và có đầy đủ các khả năng của mộtngôn ngữ lập trình hướng đối tượng
Objective-C đơn giản và nhỏ gọn nhưng lại là một thành phần mở rộng rấtmạnh của ngôn ngữ chuẩn ANSI C Objective-C cung cấp đầy đủ các khả nănglập trình hướng đối tượng nhưng lại được thực thi theo cách khá đơn giản và dễdàng
Hầu hết các ngôn ngữ lập trình hướng đối tượng cung cấp:
Một thư viện các Objects
Các công cụ phát triển cần thiết
Trang 22Hỗ trợ hướng đối tượng và các thư viện liên quan.
Objective-C cũng cung cấp đầy đủ các thành phần trên.Bạn có thể sử dụngObjective-C để phát triển một phần mềm hoàn thiện.Apple đã chọn Objective-Clàm ngôn ngữ lập trình chính cho hệ thống máy Mac và Iphone
Là ngôn ngữ hướng đối tượng nên Objective-C giải quyết các vấn đề lậptrình dựa trên khái niệm các Object Nó bao gồm 3 phần:
- Interface:Interface của một lớp (class) thông thường được định nghĩa trong file
header với đuôi h Nó chính là phần khai báo của một lớp
- Implementation: Mã nguồn của chương trình được viết trong phần
implementation của một lớp và được định nghĩa trong một file có đuôi m Đây là
nó phần định nghĩa của lớp
- Instantiation: Sau khi khai báo và định nghĩa một lớp, chúng ta có thể thực thể
hóa lớp này bằng việc cấp phát bộ nhớ cho new object của lớp đó
Tóm lại Objective-C là:
- Thành phần mở rộng của ngôn ngữ lập trình C
- Là ngôn ngữ lập trình hướng đối tượng đơn giản nhưng mạnh mẽ
- Là ngôn ngữ được Apple sử dụng để phát triển các ứng dụng cho hệ thống máyMac và Iphone
Tại sao lại sử dụng Objective-C
Ngôn ngữ lập trình Objective-C được chọn cho Cocoa framework vì một số lý dodưới đây:
Trang 23- Nó là ngôn ngữ lập trình hướng đối tượng và các chức năng cung cấp bởi Cocoaframework chỉ có thể được mang lại bởi các kỹ thuật hướng đối tượng.
- Nó là thành phần mở rộng của chuẩn ANSI C vì vậy các chương trình viết bằng
C của framework này sẽ không bị mất đi tính năng nào và người dùng đượchưởng các lợi thế của ngôn ngữ C
- Với ngôn ngữ này, người dùng có thể lựa chọn cả lập trình hướng đối tượng vàlập trình thủ tục khi cần thiết
- Nó đơn giản và dễ học bởi cú pháp của nó khá ngắn gọn nên nó giúp cho lậptrình viên đạt được hiệu quả mong muốn mà không gặp nhiều khó khăn
- Nó rất năng động nếu so sánh với các ngôn ngữ mở rộng khác dựa trên C Trìnhbiên dịch đóng một vai trò rất quan trọng trong việc bảo vệ thông tin liên quanđến các đối tượng để sử dụng lúc run time
- Nó là một ngôn ngữ mạnh bởi vì các quyết định có thể được đưa ra lúc biêndịch sẽ được trì hoãn cho tới khi chương trình chạy
-Sự năng động của Objective-C có hai lợi thế đáng kể:
+ Nó hỗ trợ ràng buộc động và mở tạo ra một cấu trúc đơn giản đối vớigiao diện tương tác người dùng
+ Nó cho phép phát triển các công cụ phát triển phức tạp Một giao diệncho hệ thống run time tạo điều kiện cho việc tiếp cận các thông tin lúc run timegiúp cho việc monitor ứng dụng viết bằng Objective-C
2.1. Các yếu tố căn bản của Objective-C
2.1.1 Phương thức
- Cách khai báo phương thức trong Objective - C
Không tham số: <(kiểu trả về)>
Trang 24Có tham số: <(kiểu trả về)>: <(kiểu)>: <(kiểu)>;
- Lời gọi phương thức:
Không trả về: [<đối tượng>];
[<đối tượng>: <(kiểu)>];
[<đối tượng>: <(kiểu)>: <(kiểu)>];
Trả về kết quả: = [<đối tượng>];
= [<đối tượng>: <(kiểu)>: <(kiểu)>];
2.1.2 Lớp và đối tượng
Objective-C sử dụng khái niệm Interface và Implementation để phân biêtfile Header và file Source của C (*.h và *.c) một lớp trong Objective-C địnhnghĩa là trên một giao diện (.h) còn phần thực thi trên file m các bạn chú ý là m
(void) setNumerator: (int) n;
(void) setDenominator: (int) d;
Trang 25- Cặp @ và @end là cặp giới hạn phạm vi một lớp.
- Các thuộc tính được khái báo trong cặp { } và khai báo phươngthức ở bên ngoài
- Nếu phương thức bắt đâu bằng "+" có nghĩa nó là thuộc phạm vilớp (static), còn nếu "-" thì nó ở phạm vi object
- Các phạm vi truy xuất public,protected và private giống như C++mặc định là protected
Trang 26- Các truy nhập phần tử cũng sử dụng toán tử "." đối với object và
"->" nếu là con trỏ
- Không có các tầm vực truy xuất đối với phương thức (tức là trongObjective-C các phương thức có cùng một tầm vực là public)
2.1.3 Exception và handler (xử lý ngoại lệ)
Ngôn ngữ cũng hỗ chợ các cấu trúc try - catch - throw - finally giống nhưngôn C++ @try - @catch - @throw - @finally cách thức sử dụng cũng hoàn toàntương tự
2.1.4 Categories (quản lý danh mục)
Là đặc điểm nếu bạn muốn mở rộng lớp bằng cách thêm mới vào lớp mộtphương thức Khi bạn làm việc quen với OOP (Object Oriented Programming)thì bạn sẽ thấy đây là một trong những thuộc tính vô cùng hữu ích của Objective
C, kể cả ngay khi bạn không có mã nguồn của lớp nhưng bạn vẫn hoàn toàn cóthể thêm phương thức cho lớp như thường thông qua thuộc tính này Đặc điểmnày làm giảm đi đáng kể sự kế thừa phức tạp trong C++ khi việc kế thừa chỉ đểphục vụ cho việc thêm mới một phương thức Mặt khăc việc chia mã nguồn trênnhiều files cũng giúp ích đáng kể trong việc phát triển
Chú ý với Categories:
+ Tên của category phải là duy nhất
+ Có thể thêm bao nhiêu lần mở rộng lơp từ category là không giới hạnnhưng với tên là duy nhất
+ Thông thể bổ xung biến thành phần bằng category
+ Có thể sử dụng category để tạo ra các phương thức private Nếu cần
2.1.5 Properties (thuộc tính)
Thuộc tính gần như bất cứ một ngôn ngữ mới hiện đại nào cũng hỗ chợkhái niệm này, đây là một khái niệm bảo toàn tính đóng gói của tư tưởng OOP.Đối vơi ngôn ngữ Objective-C có mốt số những hỗ chợ đặc biệt hơn một chútbạn khai báo sử dụng bằng @properties cũng giống như những ngôn ngữ kháckhi bạn sử dụng thuộc tính với Objective-C bạn sẽ có 2 lựa chọn là @synthesize
và @dynamic, với lựa chọn là @synthesize thì mặc nhiên trình biên dịch sẽ giúp
Trang 27bạn sinh ra các phương thức set và get trên thuộc tính nhưng nếu bạn lựa chọn là
@dynamic thì mọi việc bạn phải tự làm lấy
2.1.6 Kiểu id
ID trong Objective-C gần tương tự như void* trong C, không cần phải biết
rõ kiểu của object khi bạn gọi phương thức trong Objective-C điều này hoàn toànkhác với C++ bơi đơn giản khi gọi phương thức cũng giống như bạn truyềnthông điệp trong Objective-C Nếu đối tượngcó phương thức thì sẽ đáp lại thôngđiệp truyền (gọi phương thức) và phương thức được gọi
2.1.7 Ép kiểu động
Những phương thức dưới đây dùng để kiểm tra kiểu
- (BOOL) isKindOfClass: classObj >> đối tượng là hậu duệ hoặc thể hiện củaclassObj
- (BOOL) isMemberOfClass: classObj >> là một thành phần của objClass
- (BOOL) respondsToSelector: selector >> đối tượng có phương thức bởiselector
+ (BOOL) instancesRespondToSelector: selector >> đối tượng được tạo bởi lớp
có đáp ứng selector
- (id) performSelector: selector >> triệu gọi chính sách selector trên đối tượng
Trang 282.1.8 Constructors (hàm khởi tạo)
Vấn đề là với một lớp thì hàm khởi tạo dùng để sinh đối tượng và cũng làchỗ để tư duy về hàm hủy và cách thức lưu trong bộ nhớ của đối tượng Về vấnđề hủy đối tượng ta sẽ có một phần riêng và nó hoàn toàn khác biệt với việc viếthàm hủy trong C++ và các ngôn ngữ khác
-(Fraction*) initWithNumerator: (int) n denominator: (int) d {
self = [super init];
- Mặc định trong Objective-C hàm khỏi tạo là - (id) init;
- Trong Objective-C hàm khởi tạo chỉ có ý nghĩa về mặt tư duy, nó không đượcđối sử đặc biết giống như C++
Trang 292.1.9 Đa hình
Trong Objective-C không có từ khóa virtual và thực sự là không cần thiết
vì nó sẽ không tạo ra những thứ quá phức tạp giống như C++ vì việc phủ quyếthàm trong Objective-C là phủ quyết trắng chợn không liên quan gì tới sự kếthừa.nếu 2 hàm giống hệt nhau ở 2 lớp quan hệ cha con thì cũng chẳng sao cả.cũng cần nói thêm là Objective-C là đơn kế thừa
Quá trình tạo mối liên hệ giữa thể hiện của Objective-C và phương thức sẽđược gọi là thời điểm run-time.Điểu này hoàn toàn có ý nghĩa nếu bạn gọi mộtphương thức mà bản thân đối tượng không có cũng không có lỗi gì.Lỗi chỉ xảy rakhi lời gọi đó được thực hiện Tuy nhiên ban cũng được cung cấp những cơ chế
để kiểm soát việc này đây cũng là một đặc tính Run-Time của Objective-C nếubạn quan tâm có thể tìm kiếm thông tin từ việ.c chuyển tiếp thông điệp (forward)tới một đối tượng khác
Mặt khác tiện ích khác từ kiểu dữ liệu nil đã nói ở trên đó việc giải phóng
bộ nhớ Trong ngữ cảnh một đối tượng là bao gồm nhiều những đối tượngkhác.những đối tượng khác đó có thể đã được giải phóng hoặc chưa, như thế bạn
sẽ thực hiện lời gọi dealloc trên tập đối tượng mà bạn có, nếu con thì nó sẽ thựchiện giải phóng trong trường hợp bằng nil được vì nil cũng có thể truyền thôngđiệp
Trang 30Mặt khác Objective-C cũng cung cấp một cớ chế thông minh trongviệcgọi và sử dụng đối tượng mà không phải quan tâm đến việc cấp phát và giảiphóng bộ nhớ đó là cơ chế NSAutoreleasePool Để dùng được cơ chế này bạn chỉviệc nhớkẹp đoạn code mà bạn muốn kiểm soát vào trong giữaNSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init] và [pool release].
Để tải Iphone SDK, bạn có thể truy cập Apple Developer Connection tạiwebsite http://developer.apple.com/Iphone
+ Cài đặt Iphone SDK
Sau khi tải xong click đúp vào file dmg để thực hiện cài đặt SDK
- Chạy file dmg để bắt đầu quá trình cài đặt
- Chờ cho đến khi quá trình cài đặt hoàn tất
Trang 31Hình ảnh2-1:Quá trình cài đặt thành công
- Iphone Simulator: Cung cấp một phần mềm mô phỏng để mô phỏng mộtIphone hoặc iPad trên máy Mac
- Interface Builder: Một công cụ biên tập trực quan để thiết kế một giaodiện cho ứng dụng Iphone và iPad
- Instruments: Công cụ phân tích để giúp tối ưu hóa ứng dụng và quản lý
bộ nhớ trong thời gian thực