60
Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 1 Mục Lục Phần A : GIỚI THIỆU CÔNG TY THỰC TẬP............................................................................ 2 I. Chức năng ......................................................................................................................... 2 II. Tổ chức .............................................................................................................................. 3 III. Các dịch vụ.................................................................................................................... 4 1. Kiểm thử phần mềm: ................................................................................................... 4 2. phát triển ứng dụng di động: ...................................................................................... 5 3. phát triển ứng dụng Web: ........................................................................................... 8 4. Giải pháp hệ thống CNTT: .......................................................................................... 8 Phần B : NỘI DUNG THỰC TẬP ................................................................................................ 9 I. Tìm hiểu về ngôn ngữ lập trình Objective C.................................................................. 9 1. Giới thiệu về Objective C : .......................................................................................... 9 2. Cơ bản về Objective-C ............................................................................................... 11 II. Xây dựng ứng dụng tra cứu thông tin các tuyến xe buýt ........................................... 34 1. Giới thiệu: ................................................................................................................... 34 2. Xây dựng chương trình: ............................................................................................ 34 III. Xây dựng ứng dụng Ebook các bộ luật của Việt Nam trên Iphone ....................... 42 1. Giới thiệu: ................................................................................................................... 42 2. Xây dựng chương trình.............................................................................................. 42 Phần C: NHẬT KÝ THỰC TẬP .................................................................................................. 51

268_3. Bao Cao Thuc Tap - Noi Dung

Embed Size (px)

Citation preview

Page 1: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 1

Mục Lục

Phần A : GIỚI THIỆU CÔNG TY THỰC TẬP ............................................................................ 2

I. Chức năng ......................................................................................................................... 2

II. Tổ chức .............................................................................................................................. 3

III. Các dịch vụ .................................................................................................................... 4

1. Kiểm thử phần mềm: ................................................................................................... 4

2. phát triển ứng dụng di động: ...................................................................................... 5

3. phát triển ứng dụng Web: ........................................................................................... 8

4. Giải pháp hệ thống CNTT: .......................................................................................... 8

Phần B : NỘI DUNG THỰC TẬP ................................................................................................ 9

I. Tìm hiểu về ngôn ngữ lập trình Objective C.................................................................. 9

1. Giới thiệu về Objective C : .......................................................................................... 9

2. Cơ bản về Objective-C ............................................................................................... 11

II. Xây dựng ứng dụng tra cứu thông tin các tuyến xe buýt ........................................... 34

1. Giới thiệu: ................................................................................................................... 34

2. Xây dựng chương trình: ............................................................................................ 34

III. Xây dựng ứng dụng Ebook các bộ luật của Việt Nam trên Iphone ....................... 42

1. Giới thiệu: ................................................................................................................... 42

2. Xây dựng chương trình .............................................................................................. 42

Phần C: NHẬT KÝ THỰC TẬP .................................................................................................. 51

Page 2: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 2

Phần A : GIỚI THIỆU CÔNG TY THỰC TẬP

I. Chức năng

Evers chuyên sâu trong kiểm thử phần mềm , phát triển ứng dụng di động , phát

triển ứng dụng Web và Giải pháp hệ thống CNTT, cung cấp các ứng dụng cho điện

thoại di động. thử nghiệm mạng & viễn thông, ứng dụng doanh nghiệp thử nghiệm và

mọi thứ Web và ngành công nghiệp phát triển ứng dụng di động. Tiêu chuẩn chất

lượng của công ty là để vượt quá mỗi tiêu chuẩn đo lường trong sự ưu việt phát động

ứng dụng thay mặt cho khách hàng của công ty.

EVERS là có chi nhánh nằm ở cả hai Hồ Chí Minh, Việt Nam và Santa Clara, USA.

Công ty hoạt động một số phòng kiểm nghiệm được ở Bắc Mỹ - lợi thế mà có thể dẫn

đến tiết kiệm chi phí đáng kể cho khách hàng và một số trang Web và ứng dụng di

động ở Nhật, Singapore và Triều Tiên. EVERS thực hiện dự án 24 / 7 của khách hàng

trên cơ sở toàn cầu.

Page 3: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 3

Từ khởi đầu của công ty luôn coi trọng mức độ dịch vụ và quản lý chất lượng, cho

nên EVERS được chứng nhận ISO 9001:2000 chứng và sẽ được cấp giấy chứng nhận

CMMi cấp độ 3 và ISO 27001 về an ninh.

Evers có dịch vụ cụ thể phù hợp với mục tiêu khác nhau của khách hàng: cá nhân,

các công ty phát triển phần mềm, các doanh nghiệp và đội ngũ IT. Cho dù bạn cần

phải thử nghiệm độc lập / phát triển hoặc bạn đang tìm kiếm thêm các nguồn lực của

con người để đáp ứng thời hạn chặt chẽ của một dự án phần mềm, bạn sẽ tìm thấy giải

pháp của bạn và công nghệ có sẵn tại Evers và giao tiếp dễ dàng

và minh bạch trong quá trình thử nghiệm.

Tùy thuộc vào kinh nghiệm của bạn trong kiểm thử / Phát triển ứng dụng gia công

phần mềm, Evers sẽ cung cấp tất cả các hỗ trợ cần thiết liên quan đến nguồn lực và

thông tin. Công ty thậm chí còn phát triển một phương pháp đặc biệt cho quá trình

này, đã nhận được sự công nhận đặc biệt từ khách hàng của Công ty, cả hai dịch vụ

gia công phần mềm giàu kinh nghiệm người sử dụng và người mới biết lần đầu.

Bên cạnh chuyên môn kỹ thuật rộng lớn, đội Evers còn thành thạo trong hội nhập đầy

đủ và nhanh chóng với quá trình phát triển phần mềm của bạn bất kể giai đoạn mà họ

tham gia dự án.

II. Tổ chức

Công ty bao gồm các thành viên trong hội đồng quản trị: Giám đốc điều hành,

giám đốc kỹ thuật, phó chủ tịch tài chính. Công ty bào gồm các phòng: phòng tổ chức

nhân sự, phòng kỹ thuật, phòng kế toán tài chính. Phòng kỹ thuật được chia thành

các nhóm lĩnh vực: kiểm thử phần mềm , phát triển ứng dụng di động , phát triển ứng

dụng Web và Giải pháp hệ thống CNTT

Page 4: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 4

Sơ đồ tổ chức:

III. Các dịch vụ

Công ty cung cấp các dịch vụ:

1. Kiểm thử phần mềm:

Với Hệ thống tài nguyên lớn của Công ty, những người có trung bình 10 năm

kinh nghiệm làm việc về hướng dẫn sử dụng và thử nghiệm tự động hóa ở nước

ngoài cũng như làm việc cho Nortel Networks, công nghệ mạng Blade, Mountain

Iron, MobileIron, vv ở Mỹ và cũng xử lý được áp dụng trong công ty, chúng tôi tự

tin để cung cấp cho bạn một dịch vụ kiểm thử như mong đợi (thủ công và kiểm thử

tự động) với công nghệ khác nhau và cung cấp đầy đủ của kiểm thử phần mềm.

Evers sau đây với những khách hàng của mình để phát triển một lộ trình hợp tác

trong việc thiết lập mục tiêu được xác định rõ và tiêu chuẩn để kiểm tra tiêu chuẩn,

chất lượng ứng dụng, rủi ro kinh doanh, chi phí dự án và thời gian trên thị trường.

Evers cung cấp các dịch vụ kiểm thử phần mềm sau đây:

Lập kế hoạch chiến lược và thử nghiệm

Khả năng thử nghiệm

Page 5: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 5

Thử nghiệm thực tế

Thử nghiệm Vòng đời đầy đủ

Kiểm nghiệm năng suất

Thử nghiệm tính dễ sử dụng

Thử nghiệm bản địa hoá

Kiểm tra bảo mật

Thử nghiệm tính tương thích

Tự động hoá thử nghiệm

Phần mềm của Công ty thử nghiệm quy trình đơn giản:

2. phát triển ứng dụng di động:

Evers là một chuyên gia phát triển ứng dụng di động có một kinh nghiệm rộng rãi

trong các ứng dụng di động.

Công ty chuyên môn sâu trong

phát triển ứng dụng di động

trên nhiều nền tảng bao gồm

phát triển ứng dụng Windows

Mobile , phát triển trang web

cho phép điện thoại di động,

Page 6: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 6

Phát triển ứng dụng điện thoại di động Nokia dựa trên J2ME, Samsung, điện thoại

LG, Google Android, điện thoại NFC, phát triển trang web điện thoại di động

iPhone, Phát triển ứng dụng di động iPhone.

Với Đội ngũ chuyên gia phát triển ứng dụng di động của công ty sản xuất các giải

pháp tiết kiệm bằng cách cách ly các thành phần trong một ứng dụng cản trở sự

phát triển, giải quyết với những hiệu quả và ngành công nghiệp kỹ thuật tiêu

chuẩn. Công ty đã phát triển nhiều ứng dụng tùy chỉnh điện thoại di động iPhone,

ứng dụng di động dựa trên Java (J2ME) và Giải pháp ứng dụng của Windows

Mobile. Công ty cũng cung cấp đầy đủ các giải pháp end-to-end điện thoại di động

/ không dây, tích hợp các giao dịch kinh doanh thông qua các thiết bị di động và hệ

thống phân phối nội dung để xuất bản một loạt các thông tin có giá trị cho cả hai

nhà cung cấp và người mua.

Hiện tại trung tâm phát triển ra nước ngoài của công ty cung cấp đầy đủ Phát triển

phổ biến ứng dụng di động bao gồm toàn bộ chu kỳ phát triển ứng dụng di động từ

thiết kế ban đầu và kiến trúc để phát triển và hội nhập vào hệ thống hiện có. Công

ty có chuyên môn trong việc xây dựng nhiều ứng dụng sử dụng hệ điều hành Palm

OS, Windows CE, Symbian OS, Điện thoại CDMA & GSM và Tablet PC. Chúng

tôi có kinh nghiệm phát triển trong GPS dựa trên các ứng dụng J2ME.

phát triển ứng dụng iPhone / iPod / iPad:

Evers đã phát triển ứng dụng iPhone / iPod / iPad đang được sử dụng bởi nhiều

người tiêu dùng khác nhau, từ những người dùng là doanh nghiệp với người

tiêu dùng đại chúng.

Công ty có một đội ngũ có tay nghề cao của các lập trình ứng dụng iPhone cho

iPhone / iPod / Phát triển ứng dụng iPad với kinh nghiệm trên iPhone / iPod /

iPad SDK, 2.2 iPhone SDK 2.2.1 và SDK 3.0 beta 2 người làm việc cho iOS

Phát triển ứng dụng Điện thoại di động & phát triển Website iOS

Page 7: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 7

Phát triển ứng dụng Android:

EVERS đưa ra Di động Ứng dụng Phát triển cho Google Android. Ứng dụng

Android là ngăn xếp phần mềm cho thiết bị di động bao gồm hệ điều hành,

phần mềm trung gian và các ứng dụng then chốt. Phát triển Ứng dụng Android

của công ty tìm hiểu khả năng vô hạn của Android qua toàn diện của tập hợp

các công cụ phát triển.

Phát triển ứng dụng Windows Phone:

Evers là một công ty hàng đầu phát triển ứng dụng di động và lập trình ứng

dụng điện thoại thông minh công ty tại Việt Nam cung cấp chất lượng hàng đầu

các dịch vụ Windows phát triển ứng dụng điện thoại cho khách hàng trên toàn

thế giới. Evers có kinh nghiệm tốt trong phát triển ứng dụng hệ điều hành

Windows Phone bằng cách cung cấp các giải pháp mong muốn cho các khách

hàng toàn cầu.

Phát triển ứng dụng Blackberry Playbook:

Evers cung cấp giải pháp hoàn chỉnh cho phát triển ứng dụng điện thoại thông

minh BlackBerry, đã sẵn sàng để thách thức đối với Phát triển ứng dụng

BlackBerry Tablet. Với các chuyên gia lập trình BlackBerry đủ điều kiện và

Các nhà phát triển JAVA, công ty có thể cung cấp cho bạn phong phú và giải

pháp phát triển ứng dụng độc đáo với giá cả phải chăng.

Phát triển ứng dụng BlackBerry :

EVERS giỏi về phát triển ứng dụng Blackberry ( Ứng dụng CLDC & Both

Middle), phát triển phần mềm Blackberry, Lập trình Blackberry. Công ty thậm

chí có thể tạo ra ứng dụng Blackberry bên thứ ba cho công cụ cấp tiến. EVERS

có khả năng để xây dựng loại khổng lồ của ứng dụng trên Blackberry.

Page 8: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 8

3. phát triển ứng dụng Web:

EVERS cung cấp các dịch vụ ứng dụng Web sau đây:

Phát triển ứng dụng doanh nghiệp mới

Ứng dụng doanh nghiệp niêm yết

Ứng dụng duy trì doanh nghiệp

Bảo trì ứng dụng Doanh nghiệp

4. Giải pháp hệ thống CNTT:

Bạn có một doanh nghiệp có nhu cầu của một mạng có độ tin cậy cao? Hệ thống

VoIP và camera sẵn sàng trong công ty của bạn? Công ty của bạn đã sẵn sàng để

tận hưởng những đáp ứng của đủ tiêu chuẩn IT mọi người tại một chi phí hợp lý

không? Bạn đã sẵn sàng cho sự tiện lợi của một mạng gia đình? Bạn có nghĩ rằng

bạn có một virus hoặc phần mềm gián điệp? Máy tính của bạn phản ứng chậm

hoặc cản bởi các cửa sổ pop up? Evers có những gì bạn đang tìm kiếm:

Mạng Thiết kế & Thực hiện

Máy tính và bảo trì mạng

Cài đặt hệ thống VoIP

cài đặt hệ thống camera

Page 9: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 9

Phần B : NỘI DUNG THỰC TẬP

I. Tìm hiểu về ngôn ngữ lập trình Objective C

1. Giới thiệu về Objective C :

Objective-C là ngôn ngữ lập trình đã xuất hiện từ rất lâu, nó được thiết kế và

phát triển từ năm 1980. Hiện tại, Objective-C lại trở nên phổ biến vì nó được

Apple chọn làm ngôn ngữ lập trình cho hệ thống Mac và iPhone.

Objective-C được thiết kế bởi Brad Cox khi ông làm việc cho công ty Stepstone

vào đầu những năm 1980. 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ủa ngô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ột ngô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ất mạnh

của ngôn ngữ chuẩn ANSI C. Objective-C cung cấp đầy đủ các khả năng lậ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.

Objective-C được thiết kế với mục đích đưa vào C các tính năng hướng đối tượng

một các đơn giản và dễ hiểu nhất.

Objective-C là ngôn ngữ chính được Apple chọn để viết các ứng dụng cho hệ điều

hành MAC, iPod và iPhone. Như vậy, để nắm được Objective-C bạn phải có kinh

nghiệm về ngôn ngữ C. Nếu bạn có kiến thức tốt về C thì bạn có thể nắm nhanh

Objective-C và có thể bắt đầu phát triển các ứng dụng cho iPhone và hệ điều hành

MAC. Nếu không, bạn nên dành thời gian tìm hiểu thêm về ngôn ngữ C trước khi

tìm hiểu Objective-C.

Page 10: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 10

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

Hỗ 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ụng

Objective-C để phát triển một phần mềm hoàn thiện. Apple đã chọn Objective-C

là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ập trì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 đó.

Ngôn ngữ lập trình Objective-C được chọn cho Cocoa framework vì một số lý do

dưới đây:

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

Cocoa framework 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

được hưởng các lợi thế của ngôn ngữ C.

Page 11: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 11

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(cái này nghi ngờ quá)

nên nó giúp cho lập trì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ình biê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ên

dị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ới giao 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ện cho 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 time giúp

cho việc monitor ứng dụng viết bằng Objective-C.

2. Cơ bản về Objective-C

2.1 Từ khóa

a) Khai báo class, category và protocol

@interface: khai báo class hoặc interface.

@implementation: định nghĩa class hoặc category.

@protocol: khai báo protocol

@end: kết thúc trong việc khai báo, định nghĩa category hoặc protocol.

@private: giới hạn phạm vi trong lớp mà biến thể hiện được khai báo.

@protected: giới hạn phạm vi trong lớp và lớp con kế thừa mà biến thể

hiện được khai báo.

@public: không giới hạn phạm vi truy xuất.

Page 12: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 12

Mặc định là @protected

@try

@throw

@catch

@finally

@class: khai báo trước một tên lớp đã được định nghĩa ở một nơi khác.

@selector(method_name): trả về một selector đã được biên dịch mà được

định nghĩa thông qua method_name.

@protocol(protocol_name): trả về một protocol protocol_name (một thể

hiện của một lớp Protocol). @protocol là hợp lệ (không có

protocol_name) trong trường hợp khai báo trước

@synchronized: định nghĩa một block mã nguồn trong nó phải được thực

hiện đồng bộ

#import: dùng để include một file, tương tự include trong C, C++.

b) Phạm vi truy xuất các biến thể hiện

c) Xử lý ngoại lệ

d) Các mục đích cụ thể khác

2.2 Câu lệnh trong Objective-C

Các câu lệnh điều khiển if, switch và các câu lệnh lặp for, while… tương tự

như C/C++ hoặc Java

Các câu lệnh rẽ nhánh:

if ( ) {

} else if ( ) {

}

else {

}

Page 13: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 13

switch () {

case :

break;

default:

break;

}

Các câu lệnh lặp:

for (; ; ) {

}

while ( ) {

}

do {

} while ( )

2.3 Đối Tượng

Một chương trình hướng đối tượng được xây dựng từ các đối tượng. Mỗi

đối tượng bao gồm dữ liệu và các phương thức để sử dụng hoặc tương tác trên

các dữ liệu đó.

Objective-C cho phép định danh một đối tượng mà không cần phải chỉ ra một

lớp cụ thể của đối tượng đó, điều này cho phép định kiểu động.

Trong chương trình thì ta phải luôn đảm bảo rằng ta phải luôn xử lý các đối

tượng không còn cần thiết nữa.

a. ID:

Trong Objective-C, định danh đối tượng là một kiểu dữ liệu khác biệt: id.

Kiểu này được định nghĩa như là một con trỏ trỏ đến một đối tượng, trong

thực tế, một con trỏ trỏ đến các biến thể hiện của một đối tượng, với dữ liệu

duy nhất. Giống như hàm hoặc mảng trong C, một đối tượng được định

Page 14: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 14

danh bởi một địa chỉ. Tất cả các đối tượng, bất kể là biến thể hiện hay

phương thức, đều có kiểu là id.

b. Định kiểu động:

Kiểu id là một kiểu hoàn toàn không hạn chế. Bản thân nó không mang

thông tin về một đối tượng, ngoài trừ nó là một đối tượng.

Nhưng các đối tượng lại không giống nhau. Tại một vài thời điểm, chương

trình cần biết rõ các thông tin đặc tả của một đối tượng, các biến thể hiện

mà nó chứa, các hàm mà nó có thể thực hiện, kiểu id khi được thiết kế ra

không hỗ trợ được điều này.

Để hỗ trợ điều này, mỗi đối tượng được thiết kế mang trong nó một biến thể

hiện isa với mục đích định danh lớp của đối tượng, cho biết đối tượng đó

thuộc loại nào. Nhưng vậy tại mỗi thời điểm runtime, đối tượng là các kiểu

động. Bất cứ lúc nào cần, hệ thống runtime có thể biết chính xác lớp mà đối

tượng đó thuộc về, bằng cách hỏi ngay đối tượng đó.

Con trở isa cho phép các đối tượng tìm các thông tin về bản thân chúng.

Trình biên dịch ghi nhận các thông tin về định nghĩa lớp vào các cấu trúc dữ

liệu để hệ thống runtime sử dụng. Các hàm của hệ thống runtime sử dụng

isa để tìm ra các thông tin này tại thời điểm runtime.

c. Bộ nhớ:

Trong lập trình Objective-C, một điều quan trọng là phải giải phóng các đối

tượng không còn sử dụng, nếu không bộ nhớ sẽ tràn. Và một điều quan

trọng không kém đó là không được giải phóng đối tượng khi nó đang được

sử dụng.

Page 15: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 15

2.4 Lớp

Một lớp trong Objective-C được định nghĩa gồm 2 file thành phần tương tự C,

C++. Một file *.h định nghĩa trước các biến thành phần và tên các phương thức,

file *.m định nghĩa phần thực thi cho các phương thức trong file *.h

File ClassName.h

#import <headerFile.h>

@interface ClassName {

variable1 declaration;

variable2 declaration;

}

method1 declaration;

method2 declaration;

@end

Objective-C sử dụng từ khóa @interface để khai báo một tên lớp trong file h.

Từ khóa @end được sử dụng ở cuối phần khai báo.

File ClassName.m:

#import “ClassName.h”

@implementation ClassName

-method 1 //triển khai phương thức 1

-method 2 // triển khai phương thức 2

@end

Objective-C sử dụng từ khóa @implementation để khai báo phần thực thi thực

sự của lớp trong file m. Từ khóa @end được sử dụng ở cuối phần khai báo.

Page 16: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 16

2.4.1 Thuộc tính:

Cú pháp khai báo thuộc tính:

[Access Privilege] TypeName varName;

Ví dụ:

@private

int att1;

NSString str1;

@protected

int att2;

@public

NSString str2;

int att3;

Mặc định khi không sử dụng từ khóa quyền truy xuất là @protected

Phương thức:

Cú pháp định nghĩa một phương thức

[Access Privilege](return_type) methodname: (type1) para1 : (type2) para2

(…);

Gọi phương thức

[object methodname:para1 : para2…];

Ví dụ:

Khai báo:

-(MyClass*) constructor: (int) a : (int) b;

Triển khai

-(MyClass*) constructor: (int) a : (int) b {

self = [super init];

Page 17: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 17

if(self) {

var1 = a;

var2 = b;

}

return self;

}

}

Lời gọi phương thức như sau

[myClassObject constructor: 100 : 200];

Trong Objective-C chỉ có 2 khái niệm quyền truy xuất đến phương thức: truy

xuất hoàn toàn qua lớp (public static) và truy xuất hoàn toàn qua đối tượng

(public)

Objective-C qui định phần định nghĩa truy xuất như sau

Phương thức truy xuất thông qua tên lớp sẽ có ký hiệu là dấu +

Phương thức truy xuất thông qua đối tượng sẽ có ký hiệu là dấu –

@interface MyClass: NSObject

-(MyClass*) staticMethod: (int) a : (int) b;

-(MyClass*) publicMethod: (int) a : (int) b;

@end

Trong trường hợp phương thức có nhiều tham số, và để thể hiện được ý nghĩa

của các tham số trong lời gọi phương thức, Objective-C cho phép một cú pháp

khai báo khác cho phương thức như sau:

[Access Privlilege](return_type) methodPara1: (type) para1 andPara2: (type) para2;

Lời gọi phương thức khi đó sẽ như sau:

[object methodPara1: value1 andPara2: value2];

Ví dụ:

-(void) setX: (int) x Y: (int) y;

Page 18: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 18

-(void) setX: (int) x Y: (int) y {

var1 = x;

var2 = y;

}

[myObject setX: 15 Y: 20];

2.4.2 Kế thừa

Tính kế thừa trong Objective-C tương tự trong các ngôn ngữ khác như C++,…

#import “SuperClass.h”

#import <headerFile.h>

@interface ClassName:SuperClass {

variable1 declaration;

variable2 declaration;

}

method1 declaration;

method2 declaration;

@end

Trong Objective-C, thực sự tất cả các lớp khi tạo ra đều kế thừa từ lớp NSObject

2.4.3 Phương thức tạo

Trong Objective-C không có khái niệm phương thức tạo cho một lớp. Tất cả

các đối tượng của một lớp phải được cấp phát thông qua phương thức alloc và

init.

MyClass *myObject = [[MyClass alloc]init];

Trong đó phương thức alloc là cấp phát vùng nhớ, còn phương thức init như là

một phương thức tạo mặc định trong Objective-C, được định nghĩa trong lớp

NSObject.

Page 19: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 19

-(id) init;

Ta thường định nghĩa lại phương thức tạo có tham số của một lớp như sau:

#import “SuperClass.h”

#import <headerFile.h>

@interface MyClass: NSObject {

int var1;

int var2;

}

-(MyClass*) constructor: (int) a : (int) b;

@end

#import “MyClass.h”

@implementation MyClass

-(MyClass*) constructor: (int) a : (int) b {

self = [super init];

if(self) {

var1 = a;

var2 = b;

}

return self;

}@end

Page 20: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 20

Từ khóa super con trỏ trỏ đến lớp cha của lớp hiện tại, tương tự như base trong

C++ hoặc super trong Java.

Từ khóa self là con trỏ đại diện cho lớp hiện tại, tương tự con trỏ this trong

C++ hay Java

2.4.4 Properties

Trong Objective-C hỗ trợ tính năng Properties, cho phép chúng ta định nghĩa

các bộ truy xuất (setter/getter) vì vậy sẽ có nhiều lợi ích sử dụng khi truy xuất

đến các biến thể hiện của đối tượng.

Định nghĩa trong file.h: @property (<attributes>) type propertyName;

Thực thi trong file.m: @synthesize propertyName;

Truy xuất đến properties thông qua cú pháp object.property:

#import <Foundation/Foundation.h>

@interface Address : NSObject {

int countryCode;

int cityCode;

}

@property (readonly) int countryCode;

@property int cityCode;

@end

#import “Address.h”

@implementation Address

@synthesize countryCode;

@synthesize cityCode;

@end

Page 21: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 21

Address *address = [[Address alloc] init];

Int code = address.countryCode;

address.cityCode = 99;

Các thuộc tính cho Properties

Writability

readwrite: chỉ ra Properties có thể đọc và ghi, thuộc tính này là mặc

định

read-only: chỉ ra Properties chỉ có thể đọc.

Setter Semantics

assign: là thuộc tính mặc định. Ta thường sử dụng assign cho các kiểu

vô hướng như NSInteger, CGRect…

2.5 Category

Khi ta muốn thêm một số phương thức vào một lớp có sẵn, thông thường ta

sẽ mở rộng lớp đó bằng cách viết lại mã nguồn. Objective-C cung cấp tính năng

Category cho phép ta mở rộng lớp mà không cần phải viết lại mã nguồn của lớp

cũ. Category cho phép ta mở rộng lớp cũ trong một bộ thực thi khác.

Giả sử ta có một lớp MyClass đã định nghĩa:

MyClass.h

@interface MyClass

-(void) print;

@end

MyClass.m

#import “MyClass.h”

@implementation MyClass

-(void) print {

//to do print}

Page 22: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 22

Ta muốn thêm một một phương thức newMethod, ta sử dụng tính năng

Category của Objective-C như sau:

MyCategory.h

#import “MyClass.h”

@interface MyClass (MyNewCategory)

-(void) newMethod;

@end

MyCategory.m

#import “MyCategory.h”

@implementation MyClass (MyNewCategory)

-(void) newMethod {

//to do new method

}

Sử dụng như sau:

#import “MyClass.h”

#import “MyCategory.h”

int main(int argc, const char *argv) {

MyClass *myObject = [[MyClass alloc] init];

[myObject print];

[myObject newMethod];

}

Tên của Category là duy nhất, có thể thêm nhiều Category nhưng không được

trùng tên.

Trong Category không cho phép thêm các biến thể hiện

Ngoài mục đích mở rộng, Category thường được sử dụng để “định nghĩa” các

phương thức “private” (không được hỗ trợ trong Objective-C)

Page 23: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 23

2.6 Posing

Pose là một tính năng của Objective-C cho phép lớp con thay thế (pose – in

place of) lớp cha mà nó kế thừa trong một ngữ cảnh nhất định.

@interface Fraction

-(void) print;

@end

#import “Fraction.h”

@implementation Fraction

-(void) print {

printf( “printf of Fraction”);

}

@end

#import “Fraction.h”

@interface FractionA : Fraction

-(void) print;

@end

#import “FractionA.h”

@implementation FractionA

-(void) print {

printf( “new printf of FractionA”);

}

@end

#import “Fraction.h”

#import “FractionB.h”

int main( int argc, const char *argv[] ) {

Fraction *frac = [[Fraction alloc] init];

Page 24: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 24

// print it

printf( “The fraction is: ” );

[frac print];

printf( “\n” );

// FractionA pose as Fraction

[FractionA poseAsClass: [Fraction class]];

Fraction *frac2 = [[Fraction alloc] init];

// print it

printf( “The fraction is: ” );

[frac2 print];

printf( “\n” );

// free memory

[frac release];

[frac2 release];

return 0;

}

Kết quả là:

The fraction is: printf of Fraction

The fraction is: new printf of FractionA

Phương thức poseAsClass là một phần của protocol NSObject

2.7 Protocol

Protocol định nghĩa một danh sách các phương thức bắt buộc hoặc tùy chọn mà

các lớp chấp nhận (adopt) protocol bắt buộc phải thực thi.

@protocol MyProtocol

- (void)requiredMethod;

@optional

Page 25: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 25

- (void)anOptionalMethod;

- (void)anotherOptionalMethod;

@required

- (void)anotherRequiredMethod;

@end

Các phương thức khai báo trong Protocol cũng có thể là các khai báo Properties.

Các từ khóa @optional và @required thể hiện theo đúng ý nghĩa của nó, nếu

không sử dụng 2 từ khóa này thì mặc định là @required.

@protocol NSCoding

- (void)encodeWithCoder:(NSCoder *)aCoder;

- (id)initWithCoder:(NSCoder *)aDecoder;

@end

// Interface

@interface SomeClass : NSObject <NSCoding> {

}

// Implementation

@implementation SomeClass

-(void)encodeWithCoder:(NSCoder *)aCoder{

}

-(id)initWithCoder:(NSCoder *)aDecoder{

}

Page 26: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 26

SomeClass triển khai Protocol NSCoding theo cú pháp <Protocol>

@interface ClassName : ItsSuperclass < protocol list >

@interface ClassName ( CategoryName ) < protocol list >

Ví dụ:

@interface Formatter : NSObject < Formatting, Prettifying >

Protocol được sử dụng trong các trường hợp:

Khai báo các phương thức dự kiến sẽ được thực thi

Khai báo một interface cho một đối tượng trong khi ẩn đi lớp của nó

Khảo sát tương đồng giữa các lớp mà không phải liên quan đến cấu trúc thứ

bậc

2.8 Association References

Sử dụng tham chiếu liên kết để giả lập việc bổ sung các biến thể hiện đối tượng

vào một đối tượng khác.

Việc khởi tạo một tham chiếu liên kết chủ yếu dựa trên một key, ta có thể thêm

nhiều liên kết nếu ta muốn với nhiều key khác nhau, sử dụng hàm runtime của

Objective-C là objc_setAssociatedObject

void objc_setAssociatedObject (id object, void *key, id value, objc_AssociationPolicy

policy)

object: đối tượng nguồn của liên kết

key: khóa của liên kết. Khóa này thường là đối tượng static.

value: giá trị liên kết với khóa cho đối tượng. Đưa giá trị nil để xóa một liên kết

đã tồn tại

policy: các policy cho liên kết

static char overviewKey;

NSArray *array = [[NSArray alloc] initWithObjects:@”One”, @”Two”, @”Three”,

nil];

Page 27: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 27

NSString *overview = [[NSString alloc] initWithFormat:@”%@”, @”First three

numbers”];

objc_setAssociatedObject(array, &overviewKey, overview,

OBJC_ASSOCIATION_RETAIN);

Tạo liên kết overview vào đối tượng array, ta truy xuất đối tượng liên kết

overview thông qua đối tượng array và khó

NSString *associatedObject = (NSString )objc_getAssociatedObject(array,

&overviewKey);

2.9 Selector

Trong Objective-C, khái niệm Selector có 2 nghĩa. Nó có thể được dùng đơn

giản là chỉ đến tên của một phương thức khi nó được sử dụng trong mã nguồn

một thông điệp gửi đến một đối tượng. Bên cạnh đó nó còn chỉ đến một định

danh duy nhất mà thay thế cho một tên khi mã nguồn được biên dịch

Selector khi được biên dịch có kiểu là SEL. Tất cả các phương thức có cùng tên

thì có cùng selector. Ta có thể sử dụng một selector để triệu gọi một phương

thức trên một đối tượng, điều này thể hiện khá căn bản mẫu thiết kế target-

action trong Cocoa.

SEL setWidthHeight;

setWidthHeight = @selector(setWidth:Height:);

Chỉ thị @selector cho phép ta tham chiếu đến một selector được biên dịch hơn

là tên một phương thức đầy đủ. Đoạn mã trên là một selector cho phương thức

setWidth:Height được assign cho biến SEL là setWidthHeight.

Ở trên trường hợp ta tham chiếu đến một selector thông qua chỉ thị @selector,

trong một số trường hợp ta có thể chuyển từ một chuỗi ký tự thành một selector

trong thời điểm runtime bằng phương thức NSSelectorFromString.

Page 28: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 28

setWidthHeight = NSSelectorFromString(aBuffer);

Và ngược lại ta có thể lấy tên phương thức từ một selector thông qua phương

thức NSStringFromSelector.

NSString *method;

method = NSStringFromSelector(setWidthHeight);

Một selector đã biên dịch chị định một tên phương thức chứ không thực thi

phương thức. Ví dụ, có một phương thức Display cho một lớp, có nhiều

selector giống nhau cho phương thức Display ở các lớp khác, với mục đích đa

hình và ràng buộc động. Nếu có một selector cho mỗi phương thức thực thi, thì

một thông điệp sẽ không khác một lời gọi phương thức.

Một phương thức lớp và một phương thức thể hiện có cùng tên được assign bởi

một selector. Tuy nhiên, bởi vì 2 phương thức này phân biệt domain (phạm vi

lớp, phạm vi đối tượng của lớp) nên sẽ không có sự nhầm lẫn giữa 2 phương

thức này.

Việc định tuyến một thông điệp truy xuất vào một phương thức chỉ thông qua

một selector duy nhất, vì vậy nó đối xử như nhau đối với các phương thức có

cùng selecor. Nó phát hiện kiểu trả về của phương thức và kiểu dữ liệu của các

tham số thông qua selector. Vì vậy, ngoại trừ thông điệp truyền vào các bộ

nhận kiểu tĩnh, còn lại với các ràng buộc động nó yêu cầu tất cả các tên phương

thức thực thi phải có cùng kiểu trả về và có tham số cùng kiểu. (các bộ nhận

kiểu tĩnh là ngoại lệ, trình biên dịch có thể biết về các phương thức thực thi từ

kiểu lớp).

Mặc dù định danh của phương thức lớp và phương thức thể hiện là cùng một

selector, nhưng chúng có thể có kiểu trả về và kiểu của các tham số khác nhau.

Page 29: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 29

Ba phương thức performSelector:, performSelector:withObject:, và

performSelector:withObject:withObject:, định nghĩa trong protocol NSObject

lấy các định danh SEL như là các tham số khởi tạo. Tất cả các phương thức này

ánh xạ trực tiếp vào thông điệp phương thức.

Ví dụ:

[friend performSelector:@selector(gossipAbout:) withObject:aNeighbor];

Tương đương với

[friend gossipAbout:aNeighbor];

Hoặc ví dụ:

id helper = getTheReceiver();

SEL request = getTheSelector();

[helper performSelector:request];

Các phương thức có thể biến đổi tại thời điểm runtime, như ở trên bộ nhận

helper được chọn thông qua phương thức getTheReceiver và bộ nhận này được

yêu cầu thực hiện phương thức request thông qua phương thức getTheSelector

tại thời điểm runtime.

Lưu ý, khi một bộ nhận buộc phải thực hiện một phương thức mà không thuộc

phạm vi của mình thông qua selector thì đương nhiên sẽ xuất hiện lỗi. Vì những

công việc này thực thi ở thời điểm runtime nên hiển nhiên lỗi sẽ chỉ xuất hiện

tại thời điểm chương trình được thực thi.

2.10 Quản lý bộ nhớ

2.10.1 Các nguyên tắc quản lý bộ nhớ:

Nguyên tắc cơ bản:

Khi bạn nắm quyền sở hữu một đối tượng, khởi tạo đối tượng bằng các

phương thức mà trong tên bắt đầu với với alloc hoặc new hoặc copy (ví dụ,

Page 30: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 30

alloc, newObject hoặc mutableCopy…) hoặc gửi một thông điệp retain, bạn

phải có trách nhiệm giải phóng quyền sở hữu đối tượng đó bằng cách sử dụng

release hoặc autorelease. Bất kỳ khi nào bạn nhận được một đối tượng (không

phải tự mình khởi tạo), bạn không được release nó.

Các nguyên tắc khác:

Khi bạn cần lưu trữ một đối tượng được nhận như một property trong một

biến thể hiện, bạn phải retain hoặc copy nó. (Điều này không đúng cho cho

tham khảo yếu, nhưng đây là điển hình hiếm).

Một đối tượng được nhận thường đảm bảo vẫn có hiệu lực trong phương thức

mà nó đã được nhận (ngoại trừ trong các ứng đa luồng và vài trường hợp

Distributes Objects). Phương thức đó có thể trả về an toàn đối tượng mà nó

được triệu gọi. Sử dụng retain trong việc kết hợp với release hoặc autorelease

khi cần thiết để bảo vệ một đối tượng khỏi hiệu lực của các thông điệp không

hợp lệ bên ngoài.

autorelease có nghĩa là “gửi một thông điệp release sau đó

2.10.2 Vấn đề khi khởi tạo đối tượng:

Xét đoạn code khởi tạo đối tượng sau

TestClass *ptr = [TestClass alloc];

[ptr init];

// Do something with the object

if (ptr)

Thoạt nhìn qua có vẻ vô hại, phương thức alloc khởi tạo một vùng nhớ cho

đối tượng ptr, sau đó gửi thông điệp gọi phương thức init cho đối tượng ptr,

lỗi có thể xảy ra ở đây. Giả sử dòng lệnh ở dòng lệnh [ptr init], phương thức

init có lỗi xảy ra và trả về nil, tiếp theo ở dòng lệnh if, lúc này ptr vẫn khác

Page 31: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 31

nil mặc dù phương thức init trả về nil (nhưng nó không được gán cho ptr),

dẫn tới ý nghĩa của phương thức tạo thực sự không còn nữa.

Khi đó, đoạn code sau sẽ giải quyết được khả năng lỗi ở trên

TestClass *ptr = [[TestClass alloc] init];

// Do something with the object

if (ptr)

Giả sử init có lỗi và trả về nil thì ptr vẫn sẽ được gán là nil, do đó dòng lệnh

if sẽ thực hiện đúng ý nghĩa của nó.

Ý nghĩa từ ví dụ này đó là, ta luôn luôn phải trả về nil trong phương thức

init nếu có lỗi khởi tạo xảy ra và lưu ý phải kết hợp 2 lời gọi phương thức

alloc và init.

2.10.3 Release

Nếu bạn khởi tạo một đối tượng sử dụng cách thủ công alloc, bạn cần phải

release đối tượng sau đó. Bạn không nên thực hiện release thủ công một đối

tượng autorealse bởi vì ứng dụng có thể sẽ bị crash nếu bạn làm điều đó.

// string1 will be released automatically

NSString* string1 = [NSString string];

// must release this when done

NSString* string2 = [[NSString alloc] init];

…..

[string2 release];

Page 32: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 32

2.10.4 Retain

Trong Objective-C, mỗi đối tượng có một bộ đếm được sử dụng để kiểm

soát tất cả các tham chiếu bởi đối tượng hoặc nó có.

Để biết được giá trị của bộ đếm này ta sử dụng thuộc tính retainCount

[object retainCount]. Phương thức alloc, new, copy và retain đều tăng bộ

đếm này lên 1

và phương thức release giảm bộ đếm này đi 1, khi bộ đếm có giá trị bằng 0

thì phương thức dealloc của đối tượng sẽ được gọi.

Bất cứ khi nào một đối tượng có nhu cầu được sử dụng bởi một đối tượng

khác nó phải retain để tăng bộ đếm retainCount lên 1, và khi nó không còn

sử dụng nữa thì phải release để giảm bộ đếm retainCount đi 1. Khi bộ đếm

có giá trị bằng 0 có nghĩa là nó không còn nhu cầu để sử dụng nữa, nó sẽ tự

hủy bằng phương thức dealloc.

2.10.5 Dealloc

Phương thức dealloc được gọi khi đối tượng đang được remove khỏi bộ

nhớ. Nó thường được sử dụng nhất khi giải phóng tất cả các tham chiếu của

các biến thể hiện con của đối tượng khỏi bộ nhớ. Hay nói cách khác, một

lớp nếu có các biến thể hiện là các đối tượng thì trong phương thức dealloc

của lớp phải thực hiện giải phóng các biến thể hiện này.

- (void)dealloc {

[childVar1 release];

[childVar2 release];

[super dealloc];

}

Phương thức [super dealloc] được sử dụng để thông báo cho lớp cha thực

hiện việc “dọn dẹp” (đây là phương thức được định nghĩa trong NSObject),

Page 33: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 33

nếu không gọi phương thức này, có thể đối tượng sẽ không được remove

khỏi bộ nhớ, sẽ gây nên tình trạng chiếm bộ nhớ.

Lưu ý: Phương thức dealloc sẽ không được gọi trong trường hợp bộ dọn rác

được bật.

2.10.6 Tham chiếu yếu

Retain một đối tượng tạo ra một tham chiếu “mạnh” đến đối tượng đó. Một

đối tượng không thể dealloc cho tới khi tất cả các tham chiếu mạng được

giải phóng hết.

Trong một số trường hợp, ta có thể muốn có một tham chiếu đến đối tượng

mà không cản trở việc đối tượng tự giải phóng chính nó, lúc này ta có thể

thiết lập một tham chiếu “yếu” đến đối tượng.

Một tham chiếu yếu được tạo ra bằng cách chứa một con trỏ trỏ đến một đối

tượng mà không retain đối tượng đó. Tham chiếu yếu rất cần thiết trong

việc thiết lập các tham chiếu vòng.

Ví dụ, đối tượng A và đối tượng B cần trao đổi thông tin với nhau nên mỗi

đối tượng cần một tham chiếu đến đối tượng kia (ví như mới quan hệ giữa 2

đối tượng cha – con), nếu như chúng ta retain đối tượng kia khi thiết lập

tham chiếu thì mỗi đối tượng chỉ được dealloc khi nào kết nối này đứt, tuy

nhiên kết nối này chỉ đứt khi có một đối tượng được dealloc mà thôi. Trong

trường hợp này ta thấy được lợi ích của tham chiếu yếu.

Chúng ta phải thật cẩn thận khi truyền thông điệp trong tham chiếu yếu,

trong trường hợp đối tượng nhận thông điệp đã dealloc thì ứng dụng có thể

sẽ bị crash. Đồng thời, trong mối quan hệ tham chiếu yếu, đối tượng được

tham chiếu đến phải có trách nhiệm báo cho đối tượng kia biết khi nó thực

Page 34: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 34

hiện dealloc, ví dụ gửi một thông điệp setDelegate: với tham số nil cho đối

tượng kia chẳng hạn, trong trường hợp đối tượng dealloc là một Delegate

của đối tượng nhận thông điệp.

II. Xây dựng ứng dụng tra cứu thông tin các tuyến xe buýt

1. Giới thiệu:

Finbus là chương trình ứng dụng giúp mọi người tra cứu thông tin cần thiết như lộ

trình, giờ hoạt động, giá vé…của các tuyến xe buýt trên địa bàn các thành phố lớn

như Hà Nội, Thành phố Hồ Chí Mình, Hải Phòng,…

Chương trình cho phép update thường xuyên khi các tuyến xe buýt thay đổi hoặc

thêm tuyến mới.

Chương trình chạy trên nền điện thoại Iphone

2. Xây dựng chương trình:

Nghiệp vụ:

Khi một hành khách muốn tìm một tuyến xe buýt để đi đến địa điểm cần thiết, khi

đó hành khách sẽ xác định địa điểm mình đang đứng (xác định tên đường hành

khách đang đứng) và tên đường hành khách cần tới, từ đó hành khác sẽ lựu chọn

những tuyến xe buýt có đi qua cả 2 địa điểm trên xem tuyến nào phù hợp với mình

nhất (căn cứ vào lộ trình, giá vé).

Lược đồ ER:

Chương trình hỗ trợ tra cứu thông tin xe buýt ở nhiều tỉnh, thành phố khác nhau.

Trong đó mỗi thành phố sẽ có nhiều xe buýt và mỗi xe chỉ thuộc một thành phố.

Page 35: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 35

Từ điển dữ liệu:

THANHPHO

Thuộc tính Ràng buộc Mô tả

MATP Not null Mã phân biệt giữa các thành phố

TENTP Not null Tên của thành phố

XEBUYT

Thuộc tính Ràng buộc Mô tả

MAXE Not null Mã phân biệt giữa các xe

MATP Not null Mã phân biệt giữa các thành phố

TENXE Not null Tên của xe buýt

TUYENDI Not null Điểm khởi hành và điểm dừng cuối của xe

buýt

CHITIET Not null Mô tả chi tiết những thông tin như: các tuyến

đường đi qua, thời gian hoạt động, thời gia

chờ, giá vé…

Mô hình quan hệ:

THANHPHO (MATP, TENTP)

XEBUYT (MAXE, MATP, TENXE, TUYENDI, CHITET)

Page 36: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 36

Sử dụng chương trình:

2.1. Giao diện chính:

Giao diện chính của chương trình sẽ liệt kê các thành phố có hỗ trợ tìm tra cứu

thông tin xe buýt. Người dùng ở thành phố nào thì chọn thành phố đó để tra

cứu.

2.2. Lựa chọn tuyến xe:

Khi chọn thành phố người dùng sẽ thấy hiện lên danh sách toàn bộ những tuyến

xe của thành phố vừa chọn. Người ùng có thể tự tìm kiếm trong danh sách để

được tuyến xe phù hợp hoặc sử dụng chức năng tìm kiếm của chương trình để

tìm kiếm một cách nhanh chóng hơn.

Page 37: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 37

2.3. Hiển thị thông tin chi tiết của xe:

Khi người dùng chọn vào 1 tuyến xe chương trình sẽ hiện ra thông tin chi tiết

của tuyến xe đó như: Lộ trình, giờ hoạt động, thời gian chờ, giá vé…

Page 38: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 38

2.4. Chức năng tìm kiếm:

Người dùng có thể sử dụng chức năng tìm kiếm bằng cách chọn biểu tượng tìm

kiếm, khi đó hành khách chỉ cần nhập tên đường vào ô tìm kiếm chương trình

sẽ tìm ra những tuyến xe đi đường đó.

Hàm tìm kiếm tuyến xe:

- (void)searchBus

{

NSString *selectedStreets = [(UITextField *)[contentView

viewWithTag:TEXTFIELD_TAG] text];

if ((selectedStreets == nil) || ([selectedStreets length] == 0))

{

UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Thông báo"

message:@"Bạn chưa nhập thông tin!" delegate:self cancelButtonTitle:nil

otherButtonTitles:@"Đóng", nil];

[alert show];

[alert release];

}

else

{

SearchResultView *obj = [[SearchResultView alloc]init];

[obj setSearchCity:_searchCity];

[obj setSelectedStreets:selectedStreets];

CGContextRef context = UIGraphicsGetCurrentContext();

[UIView beginAnimations:nil context:context];

[UIView setAnimationCurve:UIViewAnimationCurveLinear];

[UIView setAnimationDuration:1.0];

UINavigationController *navigationController = [[UINavigationController

Page 39: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 39

alloc]initWithRootViewController:obj];

navigationController.modalTransitionStyle =

UIModalTransitionStyleFlipHorizontal;

[[self navigationController] presentModalViewController:navigationController

animated:YES];

[navigationController release];

[UIView commitAnimations];

}

}

2.5. Chức năng update:

Khi có thay đổi về thông tin các tuyến xe buýt hoặc có thếm có tuyến xe buýt

mới thì người dùng có thể sử dụng chức năng update để cập nhật thông tin mới

nhấtt

Hàm thêm các thành phố:

-(void) insertRemoteCity:(int)ID City:(NSString*)City1

{

sqlite3 *database ;

@try {

[[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{

const char *sqlStatement = "insert into CityTable(CityName,ID)

values(?,?)";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

Page 40: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 40

{

sqlite3_bind_text( compiledStatement, 1, [City1 UTF8String], -1,

SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID);

}

if(sqlite3_step(compiledStatement) != SQLITE_DONE )

{

NSLog( @"Error: %s", sqlite3_errmsg(database) );

}

else {

NSLog( @"Update CityName id = %d",

sqlite3_last_insert_rowid(database));

}

sqlite3_finalize(compiledStatement);

}

}

@catch (NSException * e) {

NSLog(@"Exception: error in save data to table product -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

Hàm thêm các tuyến xe buýt:

-(void) InsertRemoteBusName:(int)ID BusName:(NSString*)BusName1 CityID:(int)CityID1

Brief:(NSString*)brief1

{

sqlite3 *database ;

@try {

[[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{

const char *sqlStatement = "insert into BusTable(BusName, ID,CityID,Brief)

values(?,?,?,?)";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

{

sqlite3_bind_text( compiledStatement, 1, [BusName1 UTF8String], -1,

SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID);

sqlite3_bind_int(compiledStatement, 3, CityID1);

sqlite3_bind_text( compiledStatement, 4, [brief1 UTF8String], -1,

Page 41: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 41

SQLITE_TRANSIENT);

}

if(sqlite3_step(compiledStatement) != SQLITE_DONE )

{

NSLog( @"Error Insert: %s", sqlite3_errmsg(database) );

}

else

{

NSLog( @"Insert BusName id = %d",

sqlite3_last_insert_rowid(database));

}

sqlite3_finalize(compiledStatement);

}

}

@catch (NSException * e) {

NSLog(@"Exception: error in save data to table BusTable -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

Hàm update Thông tin các tuyến xe buýt:

-(void) updateRemoteBusDetail:(int)ID Detail:(NSString*)Detail1 CityID:(int)CityID1

{

sqlite3 *database ;

@try {

[[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{

const char *sqlStatement = "update BusTable set Detail = ? where ID = ?

and CityID=?";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

{

sqlite3_bind_text( compiledStatement, 1, [Detail1 UTF8String], -

1, SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID);

sqlite3_bind_int(compiledStatement, 3, CityID1);

}

Page 42: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 42

if(sqlite3_step(compiledStatement) != SQLITE_DONE )

{

NSLog( @"Error: %s", sqlite3_errmsg(database) );

}else {

NSLog( @"Update Detail id = %d", sqlite3_last_insert_rowid(database));

}

sqlite3_finalize(compiledStatement);

}

}

@catch (NSException * e) {

NSLog(@"Exception: error in save data to table BusTable -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

III. Xây dựng ứng dụng Ebook các bộ luật của Việt Nam trên Iphone

1. Giới thiệu:

Ứng dụng giúp người dùng xem các bộ luật của Việt nam như Luật lao động, Luật

sở hữu trí tuệ, Luật giao thông, Luật dân sự, Luật hình sự…theo từng chương.

Ngoài ra người dùng có thể xem được hệ thống biển báo giao thông đường bộ,

đường thủy, đường sắt của Việt Nam. Ứng dụng còn có chức năng update nội dung

các bộ luật khi có thay đổi hoặc khi thêm các bộ luật mới.

2. Xây dựng chương trình

Lược đồ ER:

Page 43: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 43

Từ điển dữ liệu:

TENLUAT

Thuộc tính Ràng buộc Mô tả

Maluat Not null Mã phân biệt giữa các bộ luật

Tenluat Not null Tên của các bộ luật

CHUONG

Thuộc tính Ràng buộc Mô tả

Machuong Not null Mã phân biệt giữa các chương

Maluat Not null Mã phân biệt giữa các bộ luật

Tenchuong Not null Tên chương của bộ luật

Noidung Not null Nội dung của chương luật

Mô hình quan hệ:

TENLUAT (Maluat, Tenluat)

CHUONG (Maluat, Machuong, Tenchuong, Noidung)

Sử dụng chương trình:

2.1. Giao diện chính:

Giao diện của chương trình sẽ liệt kệ tên tất cả các bộ luật mà chương trình hỗ

trợ. Người dùng có thể chọn vào 1 bộ luật mà mình quan tâm để xem nội dung

của bộ luật đó.

Page 44: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 44

2.2. Lựa chọn bộ luật

Khi người dùng chọn 1 bộ luật thì chương trình sẽ liệt kê tất cả các chương của

bộ luật đó. Người dùng có thể chọn 1 chương luật để xem nội dung của chương

luật đó.

Page 45: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 45

2.3. Hiển thị nội dung chương

Khi người dùng chọn 1 chương thì chương trình sẽ hiện nội dung của chương

luật đó

2.4. Hiển thị biển báo

Khi chọn bộ luật giao thông chương trình sẽ cho phép người dùng chọn xem

văn bản luật hoặc xem hệ thống biển báo. Khi chọn hệ thống biển báo chương

trình sẽ hiển thị danh sách các loại biển báo.

Page 46: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 46

Người dùng chọn loại biển báo cần xem chương trình sẽ hiển thị các biển báo

thuộc loại biển báo đó

2.5. Chức năng update

Khi Các bộ luật có thay đổi nội dung hay thêm bộ luật mới thì người dùng

có thể update chương trình theo từng bộ luật hoặc update cho tất cả các bộ

luật.

Page 47: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 47

Hàm thêm bộ luật:

-(void) InsertLaw:(int)ID Law:(NSString*)Law1 URL:(NSString*)URL1

{

sqlite3 *database ;

@try

{

[[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{

const char *sqlStatement = "insert into LAWS(Title, ID, Url)

values(?,?,?)";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

{

sqlite3_bind_text( compiledStatement, 1, [Law1 UTF8String], -1,

SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID);

sqlite3_bind_text( compiledStatement, 3, [URL1 UTF8String], -1,

SQLITE_TRANSIENT);

}

if(sqlite3_step(compiledStatement) != SQLITE_DONE )

{

NSLog( @"Error: %s", sqlite3_errmsg(database) );

}else

{

NSLog( @"Update Chapter id = %d",

sqlite3_last_insert_rowid(database));

}

sqlite3_finalize(compiledStatement);

}

}

@catch (NSException * e) {

NSLog(@"Exception: error in save data to table product -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

Page 48: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 48

Hàm thêm chương luật:

-(void) InsertChapter:(int)ID Chapter:(NSString*)Chapter1 Brief:(NSString*)Brief1 { sqlite3 *database ; @try { [[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{ const char *sqlStatement = "insert into Chapters(Title, IDChapter, IDLaw,

Brief) values(?,?,?,?)";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

{ sqlite3_bind_text( compiledStatement, 1, [Chapter1 UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID); sqlite3_bind_int(compiledStatement, 3, LawID);

sqlite3_bind_text( compiledStatement, 4, [Brief1 UTF8String], -1, SQLITE_TRANSIENT);

} if(sqlite3_step(compiledStatement) != SQLITE_DONE ) { NSLog( @"Error: %s", sqlite3_errmsg(database) ); }else {

NSLog( @"Insert Chapter id = %d", sqlite3_last_insert_rowid(database));

} sqlite3_finalize(compiledStatement); } } @catch (NSException * e) {

NSLog(@"Exception: error in save data to table product -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

Page 49: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 49

Hàm update nội dung chương luật:

-(void) updateRemoteContents:(int)ID Contents:(NSString*)Contens1

{

sqlite3 *database ;

@try

{

[[SQLiteDataProvider instance] checkAndCreateDatabase];

NSString *databasePath = [[SQLiteDataProvider instance] databasePath];

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK)

{

const char *sqlStatement = "update Chapters set Contents = ? where

IDChapter = ? and IDLaw = ?";

sqlite3_stmt *compiledStatement = nil;

if(sqlite3_prepare_v2(database, sqlStatement, -1,

&compiledStatement, NULL) == SQLITE_OK)

{ sqlite3_bind_text( compiledStatement, 1, [Contens1 UTF8String], -1, SQLITE_TRANSIENT);

sqlite3_bind_int(compiledStatement, 2, ID); sqlite3_bind_int(compiledStatement, 3, LawID); } if(sqlite3_step(compiledStatement) != SQLITE_DONE ) {

NSLog( @"Error: %s", sqlite3_errmsg(database) );

}else

{

NSLog( @"Update Content id = %d",

sqlite3_last_insert_rowid(database));

}

sqlite3_finalize(compiledStatement);

}

}

@catch (NSException * e) {

NSLog(@"Exception: error in save data to table product -> %@", e);

}

@finally {

sqlite3_close(database);

}

}

Page 50: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 50

2.6. Chức năng tình thuế thu nhập cá nhân

Khi người dùng chọn tab công cụ chương trình sẽ hiển thị giao diện tính thuế

thu nhập cá nhân, người dùng cần nhập thu nhập trong 1 tháng và số người phụ

thuộc chương trình sẽ tính toán ra số tiền thuế cần phải đóng và số tiền còn lại.

Page 51: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 51

Phần C: NHẬT KÝ THỰC TẬP

Tuần số:

01 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai

Ba

Năm

Sáu 10/02 Tìm hiểu về Objective c Nguyễn

Thanh Tân

Bảy

CN

Page 52: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 52

Tuần số:

02 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 13/02 Tìm hiểu về Objective c Nguyễn

Thanh Tân

Ba 14/02 Tìm hiểu về Objective c Nguyễn

Thanh Tân

Tư 15/02 Sửa lỗi app SidePuzzle Nguyễn

Thanh Tân

Năm 16/02 Sửa lỗi app TravelService Nguyễn

Thanh Tân

Sáu 17/02 Sửa lỗi app whacking Nguyễn

Thanh Tân

Bảy

CN

Page 53: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 53

Tuần số:

03 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 20/02 Sửa lỗi app TaxiServices Nguyễn

Thanh Tân

Ba 21/02 Sửa lỗi app View Manga Nguyễn

Thanh Tân

Tư 22/02 Sửa lỗi app Đố Vui Nguyễn

Thanh Tân

Năm 23/02 Xây dựng app FindBus: phân

tích CSDL

Nguyễn

Thanh Tân

Sáu 24/02 FindBus: Xây dựng CSDL Nguyễn

Thanh Tân

Bảy

CN

Page 54: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 54

Tuần số:

04 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 27/02 FindBus: load danh sách các

thành phố

Nguyễn

Thanh Tân

Ba 28/02 FindBus: load danh sách các

tuyến xe cho từng thành phố

Nguyễn

Thanh Tân

Tư 29/02 FindBus: Hiển thị thông tin cho

từng tuyến xe

Nguyễn

Thanh Tân

Năm 01/03 FindBus: Xây dựng chức năng

tìm kiếm tuyến xe

Nguyễn

Thanh Tân

Sáu 02/03 FindBus: Xây dựng chức năng

update Thành phố

Nguyễn

Thanh Tân

Bảy

CN

Page 55: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 55

Tuần số:

05 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 05/03 FindBus: Xây dựng chức năng

update Tuyến xe

Nguyễn

Thanh Tân

Ba 06/03 Gắn About cho app FindBus Nguyễn

Thanh Tân

Tư 07/03 Test và sửa lỗi cho app

FindBus

Nguyễn

Thanh Tân

Năm 08/03 Xây dựng app LAW: Phân tích

CSDL

Nguyễn

Thanh Tân

Sáu 09/03 Xây dựng app LAW: xây dựng

CSDL

Nguyễn

Thanh Tân

Bảy

CN

Page 56: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 56

Tuần số:

06 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 12/03 Xây dựng app LAW: Nhập dữ

liệu

Nguyễn

Thanh Tân

Ba 13/03 Xây dựng app LAW: Load

danh sách tên các Bộ luật

Nguyễn

Thanh Tân

Tư 14/03

Xây dựng app LAW: Load

danh sách tên các chương cho

từng bộ luật

Nguyễn

Thanh Tân

Năm 15/03 Xây dựng app LAW: Hiển thị

nội dung cho từng chương luật

Nguyễn

Thanh Tân

Sáu 16/03

Xây dựng app LAW: xây

dựng chứa năng update tên

các bộ luật

Nguyễn

Thanh Tân

Bảy

CN

Page 57: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 57

Tuần số:

07 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 19/03

Xây dựng app LAW: xây

dựng chứa năng update tên các

bộ luật

Nguyễn

Thanh Tân

Ba 20/03

Xây dựng app LAW: xây

dựng chứa năng update tên các

chương luật

Nguyễn

Thanh Tân

Tư 21/03

Xây dựng app LAW: xây

dựng chứa năng update nội

dung cho từng chương.

Nguyễn

Thanh Tân

Năm 22/03

Xây dựng app LAW: xây

dựng chức năng xem biển báo

giao thông

Nguyễn

Thanh Tân

Sáu 23/03

Xây dựng app LAW: xây

dựng tiện ích tính thuế thu

nhập cá nhân

Nguyễn

Thanh Tân

Bảy

CN

Page 58: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 58

Tuần số:

08 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 26/03

Xây dựng app LAW: Test và

sửa lỗi chức năng Xem biển

báo giao thông

Nguyễn

Thanh Tân

Ba 27/03

Xây dựng app LAW: Test và

sửa lỗi chức năng Tính thuế

thu nhập cá nhân

Nguyễn

Thanh Tân

Tư 28/03 Gắn About cho app LAW Nguyễn

Thanh Tân

Năm 29/03 Test và sửa lỗi cho app LAW Nguyễn

Thanh Tân

Sáu 30/03 Update dữ liệu cho app

FindBus

Nguyễn

Thanh Tân

Bảy

CN

Page 59: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 59

Tuần số:

09 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 02/04

Ba 03/04 Gắn About cho app

TravelService

Nguyễn

Thanh Tân

Tư 04/04 Gắn About cho app Nguyễn

Thanh Tân

Năm 05/04 Gắn About cho app

SlidePuzzle

Nguyễn

Thanh Tân

Sáu 06/07 Gắn About cho app

TaxiServices

Nguyễn

Thanh Tân

Bảy

CN

Page 60: 268_3. Bao Cao Thuc Tap - Noi Dung

Báo cáo thực tập GVHD: Nguyễn Thị Minh Hiếu

Khoa Công nghệ thông tin – Trường ĐHCN Tp. Hồ Chí Minh 60

Tuần số:

10 Công việc thực hiện

Người

hướng dẫn Mức độ

Nhận xét của

người hướng

dẫn công việc

Thứ Ngày

Hai 09/04 Gắn About cho app View

Manga

Nguyễn

Thanh Tân

Ba 10/04 Gắn About cho app Đố vui Nguyễn

Thanh Tân

Năm

Sáu

Bảy

CN