Tuesday, January 19, 2016

Monday, January 18, 2016

Những lợi ích khi cho trẻ em học lập trình sớm

Gần đây, có rất nhiều ý kiến từ cộng đồng ủng hộ việc cho trẻ em học lập trình từ sớm. Cũng có ý kiến phản đối vì cho rằng việc lập trình sử dụng các ngôn ngữ lập trình với các câu lệnh phức tạp sẽ gây nên sự gượng ép, nhàm chán cho trẻ em, dẫn tới phản tác dụng. Với những trải nghiệm thú vị trong quá trình dạy trẻ em học lập trình, qua bài viết này tôi muốn nêu lên một vài quan điểm cá nhân về việc dạy lập trình cho trẻ, nhằm chia sẻ kinh nghiệm với những người làm giáo dục trẻ em và các vị phụ huynh về vấn đề này.

Tại sao dạy lập trình cho trẻ em không hề dễ?

Đầu tiên phải kể đến những nhìn nhận phiến diện về việc lập trình máy tính. Qua phim ảnh và quan sát trong đời sống hằng ngày, chúng ta thấy rằng việc lập trình là cái gì đó “khác thường”, hoặc quá phức tạp với những đoạn mã lệnh khó hiểu, rối bòng bong; những người học/làm công việc lập trình thường là những người lập dị, hoặc họ có lối sống cô độc, bừa bộn, và suốt ngày ngồi bên máy tính. Sự thật không phải như vậy, ngay cả một cậu sinh viên ham chơi games cũng có biểu hiện giống hệt như vậy; tức là đầu rối bù, ít giao tiếp và suốt ngày ngồi lỳ bên máy tính hoặc dán mắt vào chiếc laptop. Thực tế, có rất nhiều lập trình viên trên thế giới là những người thông minh, hoạt bát, vui vẻ, và là những nhà kinh doanh giỏi. Điển hình ai cũng biết về Bill Gates (sáng lập Microsoft), Mark Zuckerberg (sáng lập Facebook), Jack Dorsey (sáng lập Twitter), Larry Page & Sergey Brin (sáng lập Google), … đều là những lập trình viên siêu hạng đồng thời cũng là doanh nhân nổi tiếng đã làm thay đổi cả thể giới. Tất cả những người này đều đam mê công nghệ và có một điểm chung nữa, là đều học lập trình từ nhỏ.
Dưới đây, tôi sẽ liệt kê một số nhận thức chưa đúng về việc học lập trình:
  • Học lập trình chỉ là học ngôn ngữ lập trình và viết mã lệnh: Rất nhiều người đồng nhất việc lập trình với việc ngồi tỉ mẩn viết các dòng mã lệnh khó hiểu, rối rắm và nhàm chán. Thực ra, lập trình chính là quá trình ra lệnh cho máy tính thực hiện công việc theo những gì mình mong muốn. Do đó, nó là cả một quá trình bao gồm nảy ý tưởng, phân tích, thiết kế, sau đó viết mã lệnh chương trình, thử nghiệm và cài đặt để chạy thực tế. Quá trình này đòi hỏi phải giàu ý tưởng, sáng tạo, kiên trì và có nhiều kỹ năng giao tiếp, truyền thông quan trọng.
  • Chỉ người nào chọn nghề lập trình mới học lập trình: Nhiều người cho rằng, học lập trình thì sẽ trở thành lập trình viên. Điều này không đúng, vì từ nhỏ chúng ta học văn nhưng không phải ai cũng thành nhà văn, học toán giỏi cũng chưa chắc thành nhà toán học. Trên thế giới có nhiều doanh nhân học lập trình giỏi, nhưng họ không chọn lập trình là nghề của mình. Tuy nhiên, kiến thức và kỹ năng học được từ lập trình giúp họ rất nhiều trong việc kinh doanh.
  • Học lập trình khô cứng và làm mất khả năng học các môn khác: Trong xã hội hiện nay, phần mềm là phương tiện hỗ trợ để chúng ta làm việc, học tập, vui chơi giải trí. Do đó, học lập trình cũng có thể được lồng ghép vào các môn học khác, trở thành công cụ để rèn luyện các kỹ năng và học các kiến thức khác. Ví dụ, chúng ta có thể dạy trẻ em học lập trình để làm ra một trò chơi hỗ trợ học tiếng Anh, qua đó các em rèn luyện những kỹ năng làm việc khi lập trình, đồng thời các em cũng thuộc luôn bài học tiếng Anh mà các em đang xây dựng phần mềm. Một công, đôi việc. Không những vậy, các em sẽ chủ động học với tâm trạng hứng thú.
Tiếp theo, phải kể đến rào cản lớn nhất trong việc dạy lập trình cho trẻ em đó là công cụ và ngôn ngữ lập trình. Hầu hết các bậc phụ huynh đều nghĩ rằng khi cho con em mình học lập trình, các em sẽ ngồi tỉ mẩn gõ lệnh trong khi từ ngữ tiếng Việt vẫn còn chưa thành thạo. Nỗi ám ảnh này xuất phát từ việc chúng ta mang công cụ và ngôn ngữ lập trình của người lớn để dạy cho trẻ em. May mắn thay, hiện nay đã có các công cụ lập trình dành riêng cho trẻ em. Các em không phải học viết mã lệnh nhàm chán, rối rắm và dễ sai sót nữa. Các công cụ này cung cấp cách thức lập trình đơn giản, thông qua việc lắp ghép các khối lệnh tạo sẵn một cách trực quan.

Học lập trình sẽ giúp các em phát triển những gì?

Kích thích và phát huy trí tưởng tượng

Nguồn: encrypted-tbn3.gstatic.com
Trẻ em vốn rất tò mò và thích khám phá. Trong quá trình đó, các em sẽ rút ra kinh nghiệm đồng thời tưởng tượng thêm từ những gì đã trải nghiệm và quan sát. Tuy nhiên, trí tưởng tượng của trẻ em gắn với hình ảnh trực quan (điều này lý giải tại sao trẻ em thích đọc truyện tranh và xem phim hoạt hình). Vì vậy, để giúp các em phát huy trí tưởng tượng, chúng ta cần tạo môi trường bằng hình ảnh sinh động để các em lắp ghép những câu chuyện tưởng tượng của mình vào đó, sau đó từ việc quan sát và tác động hình ảnh do mình tạo ra, các em lại tiếp tục tưởng tượng thêm cho câu chuyện của mình ngày càng phong phú hơn. Học lập trình chính là tạo ra môi trường trực quan sinh động để các em chủ động phát huy trí tưởng tượng có mục đích.

Diễn đạt ý tưởng theo cách trực quan

Nguồn: http://www.artisanbarn.org
Nguồn: www.artisanbarn.org
Các thể loại văn mô tả, tưởng thuật giúp trẻ em có thể kể chuyện bằng lời những gì các em hiểu và tưởng tượng. Học vẽ giúp cho trẻ diễn đạt điều tưởng tượng trong đầu bằng hình vẽ. Học lập trình thông qua trò chơi sẽ giúp các em kể chuyện bằng hình ảnh chuyển động kết hợp với âm thanh. Không những vậy, câu chuyện trong trò chơi do các em tạo ra sẽ có diễn tiến thời gian và kết cấu logic chặt chẽ, tuân theo các quy tắc hợp lý. Nhờ vậy, các em có thể tăng dần mức độ phức tạp trong câu chuyện do chính các em tưởng tượng ra. Thông qua việc hòa mình vào câu truyện, trò chơi do chính các em tạo ra, các em không chỉ “kể lại” những gì quan sát được, mà còn sáng tạo thêm theo ý của mình.

Chọn lọc và thử nghiệm ý tưởng

Nguồn: www.nationalcityca.gov
Với một em bé thích đi chơi xa, tưởng tượng về hành trình đi đến Huế với hành trình đến Băng-Cốc cũng không khác nhau mấy nếu em không thực sự được quan sát và trải nghiệm cảnh vật và sự việc trên những hành trình đó. Tương tự như vậy, trí tượng tượng nếu chỉ dừng lại trong đầu các em thì mới chỉ là những hình ảnh sơ khai, đơn giản (vì không có hình ảnh thực tế để đắp “da thịt” vào phong phú hơn). Bằng việc dựng lên các câu chuyện và lập trình thành trò chơi, các em đã diễn đạt những gì mình tưởng tượng theo cách trực quan và logic, từ đó gợi mở trí tưởng tượng để có câu chuyện phức tạp hơn, chặt chẽ hơn. Xa hơn nữa, các em có thể đối chiếu so sánh để nhận biết mức độ khó – dễ của các ý tưởng, từ đó có thể thử nghiệm, phân loại và chọn lọc được những ý tưởng của mình.

Phân chia và phối hợp làm việc theo nhóm

Nguồn: us.cdn2.123rf.com
Nguồn: us.cdn2.123rf.com
Khoa học đã chứng minh, lao động và giao tiếp là hai công cụ cơ bản để hình thành ngôn ngữ và tư duy của con người. Việc học lập trình không chỉ tạo động lực để trẻ em chủ động làm việc mà còn thúc đẩy các em chia sẻ và phối hợp với nhau để hoàn thành công việc. Một trò chơi được làm ra đôi khi đòi hỏi nhiều em cùng tham gia thực hiện. Quá trình làm sẽ đòi hỏi các em giao tiếp với nhau để chia sẻ, trao đổi ý tưởng, kiến thức, kinh nghiệm. Với sự hỗ trợ của thầy cô hướng dẫn, các em sẽ làm quen và dần dần nắm bắt được kỹ năng làm việc nhóm.

Xử lý lỗi và tìm giải pháp thay thế

Nguồn: bp.blogspot.com
Nguồn: bp.blogspot.com
Đây là một kỹ năng rất quan trọng trong quá trình rèn luyện cho trẻ em. Bởi vì cuộc sống không phải lúc nào cũng màu hồng, trong khi về mặt tâm lý con người luôn muốn mọi thứ diễn ra dễ dàng, suôn sẻ và kết thúc “có hậu”. Nếu không được chuẩn bị trước, khi gặp tình huống bất lợi, một số người có thể dễ dàng bỏ cuộc. Học lập trình sẽ giúp rèn luyện tính cách kiên trì, dám đối mặt với khó khăn. Quá trình lập trình có thể phát sinh ra lỗi, đòi hỏi người viết (là các em) phải kiên trì đối mặt với cảm xúc khó chịu, đồng thời phải biết cách tìm ra lỗi và nghĩ ra giải pháp khắc phục. Việc rèn luyện cho trẻ kỹ năng này đòi hỏi thầy cô, người hướng dẫn phải có phương pháp tốt để giúp các em lĩnh hội được kỹ năng trong tâm trạng thoải mái, sẵn sàng đối mặt với những bất lợi sắp xảy ra.

Rèn luyện kỹ năng thuyết trình

Nguồn: cdn4.123rf.com
Nguồn: cdn4.123rf.com
Khi trẻ em làm được một cái gì đó, chắc chắn các em sẽ khoe ngay với người lớn (bố mẹ, anh chị, thầy cô) và bạn bè về sản phẩm mình đã làm ra. Mức độ vui sướng, hài lòng của trẻ sẽ tăng cao nếu có nhiều người lớn quan tâm, hứng thú, và hiểu rõ những gì các em đã làm. Điều này phụ thuộc rất nhiều vào khả năng trình bày, diễn đạt ý tưởng của các em. Việc học lập trình sẽ giúp cho các em rèn luyện kỹ năng thuyết trình, bao gồm từ dáng đứng, giọng điệu cho đến cách tổ chức nội dung mạch lạc, có thứ tự cũng như thái độ tự tin, chững chạc khi nói.

– Phạm Ngọc Hùng –

Suy Nghĩ về việc dạy Tin học – Hồ Đắc Phương

Bài liên quan: 5 Lý Do Nên Dạy trẻ sớm Học Lập Trình
http://javadevexpress.blogspot.com/2014/01/5-ly-do-nen-day-tre-som-hoc-lap-trinh.html

Ở Đại học, tôi thường được phân công giảng dạy sinh viên năm thứ 2, thứ 4 và hướng dẫn khóa luận. Do công việc kiêm nhiệm phụ trách dạy môn Tin học cho trường THPT Chuyên KHTN, tôi có điều kiện trực tiếp sử dụng các học liệu dành cho cấp 3, quen biết và có đôi chút hiểu biết về tình hình dạy Tin học ở cấp 3 ở nhiều địa phương trên cả nước.

Trong bài viết này, tôi muốn nhấn mạnh việc giảng dạy Tin học và CNTT hiện nay rất lạc hậu, và điều này gây tổn hại lớn đến ngành CNTT cũng như làm suy yếu một trong những tư duy khoa học quan trọng trong thời hiện đại.

Học Tin học quá muộn sẽ làm ngành CNTT tụt hậu
Ở Việt Nam, CNTT là 1 ngành quan trọng, được Đảng và Nhà nước coi là một mũi nhọn trong việc phát triển kinh tế. Và để có thể cạnh tranh trong ngành công nghiệp, chúng ta cần thật nhiều những chuyên gia – lập trình, thiết kế hệ thống, quản trị hệ thống. Những người này phải có khả năng tương tác, nhận và bàn giao công việc với các đối tác nước ngoài.Ngành CNTT của chúng ta thực sự thiếu trầm trọng những nhân lực có chất lượng cao.

Dù là một trong những Khoa CNTT có sức thu hút lớn nhất của cả nước, nhưng chúng tôi chưa đào tạo ra thật nhiều những cử nhân có “chất lượng ở mức quốc tế” như vậy. Đó là một trong những trăn trở của tập thể Khoa CNTT.

Một trong những điều chúng tôi cố gắng làm, là đưa việc giảng dạy chuyên môn vào ngay từ đầu, nhưng phải đến sau năm thứ 3 và thứ 4, sinh viên mới dần có đủ khả năng để đi thực tập. Thời lượng của việc học tập chuyên môn là rất ít. Mặc dù cấp THPT đã có môn lập trình, nhưng gần như sinh viên lên Đại học lại học lại từ đầu.

Trong bất kỳ lĩnh vực nào, để trở thành chuyên gia xuất sắc, bạn phải bỏ ra 10000h luyện tập. Ngành CNTT cũng không ngoại lệ. Trong lĩnh vực CNTT, rất nhiều hãng khởi nghiệp bởi những thanh niên còn rất trẻ. Và những người rất trẻ này thường được tiếp xúc với máy tính, lập trình từ bé.

Bill Gates trước khi khởi nghiệp Microsoft đã lao vào lập trình từ lớp 5. Sergey Brin (sáng lập Google) đã được bố (một giáo sư Toán học người Nga) dạy lập trình từ năm 7 tuổi. Ngay cả ở Việt Nam, những bạn trẻ có độ thành công tương đối cao (trong phạm vi hiểu biết của tôi) như Hồ Vĩnh Hoàng [Founder của TOSY, chuyên Tin Tổng hợp,], Vương Vũ Thắng [Founder của VCCorp, chuyên Tin Tổng hợp], Nguyễn Hòa Bình [Founder của PeaceSoft, chuyên Tin Nguyễn Huệ], Nguyễn Đình Nam [Founder của VP9, chuyên Tin Tổng hợp]cũng đều là học sinh chuyên Tin ở cấp 3. Do đã bắt đầu tích lũy “10,000h luyện tập” sớm (trước khi vào Đại học) nên họ có khả năng thành công cao hơn những người xuất phát chậm.

Ở ngay Đại học Công Nghệ, chỉ có khoảng ¼ số sinh viên vào thẳng của Khoa CNTT, Đại học Công Nghệ là có nền tảng lập trình tốt (phần lớn là học sinh có giải Tin học trong kỳ thi HSG Quốc gia). Đa phần trong tổng số ¾ sinh viên còn lại là những người thi Đại học ở khối A và khối A1 thì gần như không biết gì về lập trình, và phải dạy lại từ đầu. Và sau này, gần như tuyệt đại đa số các bạn có thành tựu đều là những học sinh chuyên Tin từ cấp 3.

Tuy nhiên, hiện nay, Tin học ở cấp THPT là môn “siêu phụ”. Giáo viên Tin học chỉ được coi là giáo viên loại 2. Gọi là “siêu phụ” vì theo kiểu “so sánh” hay có ở VN, “Tin học” còn “phụ” hơn cả Sinh – Sử – Địa. Những môn trên còn có thi tốt nghiệp, thi Đại học. Còn Tin học không được thi tốt nghiệp, không được thi Đại học (kể cả vào các khoa CNTT).

Chính vì thế, nên ở cấp 3, việc dạy và học Tin học đa phần bị buông lỏng, giáo viên muốn dạy như thế nào cũng được (đừng cho điểm quá thấp là được). Về mặt căn bản, học sinh không học đủ, không làm được những bài tập lập trình rất cơ bản. Giáo viên Tin học có thể phải kiêm nhiệm thêm hàng núi các công việc “vô danh” khác và ít có điều kiện trau dồi chuyên môn. Chính vì bị coi là môn phụ, tuyệt đại bộ phận phụ huynh đều ngăn cản con học Tin học sớm. Trong quá trình giảng dạy tại trường chuyên, một trong những vấn đề khó khăn nhất chính là việc thuyết phục phụ huynh cho phép con học Tin học, theo đuổi niềm đam mê.

Trong khi đó ở nước ngoài, học sinh sớm được học lập trình, “hý hoáy” sớm với máy tính, lập trình nên sau này khả năng phát triển lớn hơn nhiều.

Khác với nhiều ngành nghề, CNTT là ngành phụ thuộc rất lớn vào trí tuệ và kỹ năng lao động (kỹ năng lập trình, kỹ năng vận hành các hệ thống tin học). Như vậy ngành CNTT của Việt Nam hoàn toàn có thể “cất cánh” trở thành một ngành mũi nhọn. Và để tiềm năng này trở thành hiện thực, hãy coi trọng và khích lệ học sinh học Tin học từ bé.
Sự cần thiết của tư duy Tin học

Tin học, Công Nghệ Thông Tin là lĩnh vực rất rộng. Ở đây tôi quan niệm việc sử dụng máy tính hay những chương trình ứng dụng như Word, Excel chỉ là kỹ năng mà bất kỳ ai trong xã hội hiện đại cũng đều phải biết. Dạy tin học là dạy kỹ năng lập trình và tư duy thuật toán.

Nhiều người cho rằng, sau Cách mạng Công Nghiệp, thì CNTT chính là làn sóng Cách mạng KHKT tiếp theo triệt để thay đổi lịch sử loài người – nhờ máy tính mà nhiều thay đổi to lớn xảy ra trong lao động, sản xuất, khoa học, công nghệ, chính trị – gần như trong mọi hoạt động của con người.

Trong một nền kinh tế dựa vào công nghệ cao – khi mà “nội dung” (content) sẽ là một trong những mặt hàng chính thì Lập trình – thao tác trên các dữ liệu thô, tạo ra các tri thức có giá trị trở thành một kỹ năng thiết yếu, một nghề nghiệp thu hút trong thị trường lao động.

Gần như mọi khía cạnh của nền kinh tế, mọi hoạt động khoa học ngày nay đều có sự hiện diện của Tin học. Xu hướng dữ liệu lớn (giờ chúng ta đang bơi trong biển dữ liệu, vậy làm thế nào để có thể “chắt lọc” được những tri thức đáng giá) là minh chứng rõ nét cho xu thế này.

Chính vì thế, có được một tư duy tốt về thuật toán và kỹ năng lập trình sẽ giúp ích rất lớn cho học sinh.

So với nhiều ngành Khoa học khác, Tin học rèn dũa cho học sinh tư duy thuật toán và tính thực tế. Ở mức độ đơn giản, học sinh phải có được kỹ năng giải quyết vấn đề: từ một tập hợp đầu vào, cần phải xử lý như thế nào để có được một kết quả thỏa mãn. Ở mức cao hơn, học sinh phải rèn luyện kỹ năng sáng tạo ra vấn đề, rồi tìm cách giải quyết nó. Ngoài ra, Tin học sẽ giúp học sinh có được sản phẩmthông qua quá trình lao động. Điều này khiến cho việc học nói chung không chỉ mang tính lý thuyết, mà còn tăng tính thực hành.

Qua quá trình giảng dạy, tôi nhận thấy việc dạy các kỹ năng lập trình cơ bản sẽ giúp

  • Tăng tốc quá trình phát triển của học sinh.
  • Thúc đẩy sáng tạo.
  • Tăng tính tự tin.
  • Năng cao kỹ năng giải quyết vấn đề và tư duy phản biện.
  • Giúp học sinh thấy được ứng dụng cụ thể của các môn khoa học khác, đặc biệt là Toán học.
  • Định hướng nghề nghiệp.


Ở nước ngoài


Ở Hoa Kỳ, Tổng Thống Barack Obama trong thông điệp liên bang 2013, đã nhấn mạnh vào “việc xây dựng các kỹ năng cho học sinh đáp ứng một nền kinh tế công nghệ cao”, và sau này, ông kêu gọi “giới trẻ – thay vì chỉ biết tiêu thụ, hãy sản xuất ra thông tin”, và “không chỉ sử dụng máy điện thoại di động, hãy lập trình cho nó”. Hoa Kỳ đã nhiều chương trình tài trợ đưa việc giảng dạy lập trình vào khối tiểu học và trung học.

Anh quốc là quốc gia đầu tiên trên thế giới đã đưa việc học lập trình thành điều bắt buộc trong các trường tiểu học và trung học. Trẻ em sẽ học lập trình ở độ tuổi 5 đến 16. Ở giai đoạn 1, học sinh học viết chương trình nhỏ, các khía cạnh đơn giản của thuật toán, cài đặt và thực thi trên thiết bị điện tử. Trong giai đoạn 2, học sinh được học cách thiết kế và viết các chương trình phức tạp hơn, tương tác với môi trường xung quanh. Ở giai đoạn 3 (cấp trung học), học sinh học về đại số Boolean, tư duy thuật toán. Giai đoạn 4 tập trung vào sáng tạo và định hướng nghề nghiệp.

Lời kết

Việc dạy tin học và lập trình sớm không chỉ có ích cho toàn bộ học sinh, mà còn trợ giúp rất lớn cho ngành CNTT và quá trình hiện đại hóa đất nước.

Hệ thống Giáo dục phổ thông ngày nay đã quá lạc hậu trong việc giảng dạy CNTT. Và tôi kỳ vọng vào công cuộc Đổi mới Giáo dục mà Bộ Giáo dục đang tiến hành có thể góp phần thay đổi thực trạng này.

Tuy nhiên khi đọc các bài báo về các phương án thi cử mà Bộ Giáo Dục đưa ra, tôi có cảm nhận rằng, môn Tin học sẽ vẫn chỉ là một môn “Siêu phụ”.

Trong quá trình đổi mới giáo dục, Bộ Giáo Dục hãy thực sự cầu thị, mời các nhà khoa học, các chuyên gia trong lĩnh vực tin học, các chuyên gia trong ngành CNTT cùng tham gia.

Hồ Đắc Phương
Giảng viên Đại học Công Nghệ

Tuesday, January 12, 2016

Abouts - Contact Us Tutorial

Chào các bạn đã ghé thăm blog của mình

Hiện tại mình đang làm Dev Java cho tập đoàn CNTT lớn của nhật bản, chủ yếu làm các ứng dụng phía Back End, Server, và các ứng dụng web làm bằng Struts2, Spring, Hibernate và các Framework nội địa của nhật như seasar2 framework bản tiếng nhật tại http://www.seasar.org, tiếng anh tại http://www.seasar.org/en, đặc biệt cty mình chỉ làm 7h/ ngày đó là điều mình cảm thấy thú vị nhất :).

Tôn chỉ sống: "Hãy bình đẳng với những người xung quanh, có thể người ngồi cạnh bạn bây giờ kém cỏi hơn những người khác, nhưng một ngày nào đó chính người ấy lại trở thành ông nọ bà kia"

Nói như vậy không có nghĩa rằng chúng ta mong chuộc lợi ở nhau, mà ý nói chúng ta hãy luôn tôn trọng nhau, dù người đó có là ai, dù người đó như thế nào.

Xin cảm ơn!!!

Nếu cần hỗ trợ hãy liên hệ với tôi skype: letronghuan /email: java.devexpress@gmail.com

Saturday, January 9, 2016

Java Web Services API - Web Service Trong Java SOAP, RESTful

Java Web Services 
  • Các ứng dụng dịch vụ web java có thể được truy cập bởi các ngôn ngữ lập trình khác như .Net và PHP.
  • Trong Java các ứng dụng web service được thực hiện thông qua WSDL (Web Services Description Language).
  • Có hai cách để viết ứng dụng java web service đó là: SOAP và RESTful.
Có hai API chính được định nghĩa bởi Java để phát triển các ứng dụngweb service từ Java EE 6.

java web services
  • JAX-WS: Cho các dịch vụ web SOAP, có hai cách để viết code cho ứng dụng JAX-WS:
    • RPC style.
    • Document style.
  • JAX-RS: Cho các dịch vụ web RESTful, có chủ yếu là 2 thực hiện đang được sử dụng để tạo ra các ứng dụng JAX-RS:
    • Jersey.
    • RESTeasy.
Để đi sâu vào JAX-WS SOAP và JAX-RS RESTfull tương ứng với bốn kiểu viết code RPC, Document, Jersey, RESTeasy chúng ta sẽ lần lượt đi vào các bài tiếp theo.

Tổng Quan Web Service - SOAP Web Service, RESTful Web Service

1. Web Service là gì?

Về lý thuyết thì rất là dài, với thời buổi công nghệ rất dễ dàng để search và tham khảo thêm trên mạng, nhưng về cơ bản Web Service với các ngôn ngữ và nển tảng bất kỳ được hiểu như sau:

  • Web Service là một công nghệ để giao tiếp giữa các ngôn ngữ lập trình với nhau.
  • Web Service là một thành phần trong ứng dụng client server 
  • Web Service là một phương thức để giao tiếp giữa các thiết bị thông qua Network
  • Web Service là một hệ thống phần mềm cho phép tương tác giữa machine to machine
  • Ví dụ: Ngôn ngữ lập trình java có thể tương tác với PHP và .Net bằng cách sử dụng các Web Service.
  • Ví dụ ứng dụng thực tế: Tạo Web Service thanh  toán tiền, xem thời tiết, tra cứu .... code bằng Java triển khai trên server có IP là 10.1.2.32 và ứng dụng Web trên server có IP 10.1.2.33 code bằng PHP hoặc .Net để gọi Web Service thanh toán tiền, xem thời tiết, tra cứu ....
web services

2. Types of Web Services - Các loại Web Services

Có hai loại Web Service phổ biến như sau:

  • SOAP web services.
    • SOAP là viết tắt cho Simple Object Access Protocol.
    • SOAP là một giao thức base trên XML để truy cập các Web Services.
    • Ưu điểm: 
      • Không phụ thuộc nền tảng, ngôn ngữ: Có thể viết bằng bất kỳ ngôn ngữ nào và execute trên bất kỳ nền tảng nào.
      • Bảo mật web service: SOAP định nghĩa riêng các cơ chế bảo mật cho nó gọi là WS Security.
    • Nhược điểm:
      • Chậm: Sử dụng định dạng XML, mang nhiều tiêu chuẩn khắt khe khi phát triển => tốn tài nguyên, tốn băng thông khi truyền tải và parse xml
      • Phụ thuộc vào WSDL: Không có cơ chế nào khác ngoài WSDL để discover web service
  • RESTful web services.
    • REST là viết tắt cho REpresentational State Transfer.
    • REST là một kiểu cấu trúc - architectural style chứ không phải một giao thức - protocol.
    • Ưu điểm:
      • Nhanh: Không có nhiều tiêu chuẩn khắt khé => đỡ tốn băng thông và tài nguyên
      • Không phụ thuộc nền tảng, ngôn ngữ: Có thể viết bằng bất kỳ ngôn ngữ nào và execute trên bất kỳ nền tảng nào.
      • Có thể sử dụng SOAP: Có thể sử dụng SOAP web services để thực hiện.
      • Cho phép sử dụng nhiều định dạng dữ liêu khác nhau: Có thể sử dụng các định dạng dữ liệu như: Plain Text, HTML, XML and JSON.
types of web services

Để so sánh giữa hai loại web service ta có bảng so sánh 10 điểm khác nhau sau:

No.
SOAP
REST
1)
SOAP is a protocol.
REST is an architectural style.
2)
SOAP stands for Simple Object Access Protocol.
REST stands for REpresentational State Transfer.
3)
SOAP can't use REST because it is a protocol.
REST can use SOAP web services because it is a concept and can use any protocol like HTTP, SOAP.
4)
SOAP uses services interfaces to expose the business logic.
REST uses URI to expose business logic.
5)
JAX-WS is the java API for SOAP web services.
JAX-RS is the java API for RESTful web services.
6)
SOAP defines standards to be strictly followed.
REST does not define too much standards like SOAP.
7)
SOAP requires more bandwidth and resource than REST.
REST requires less bandwidth and resource than SOAP.
8)
SOAP defines its own security.
RESTful web services inherits security measures from the underlying transport.
9)
SOAP permits XML data format only.
REST permits different data format such as Plain text, HTML, XML, JSON etc.
10)
SOAP is less preferred than REST.
REST more preferred than SOAP.

3. Web Service Components - Các thành phần chính của Web Services
Web Service có ba Components chính như sau:
  • SOAP
  • WSDL
  • UDDI
Để làm rõ ba Components này chúng ta sẽ đi xem xét từng Component:

SOAP
  • SOAP là viết tắt cho Simple Object Access Protocol.
  • SOAP là một giao thức base trên XML để truy cập các Web Services.
  • SOAP là một đề xuất (recommendation) của W3C cho việc giao tiếp giữa các ứng dụng.
  • SOAP bản chất được xây dựng base trên XML, do đó nó mang tính chất của XML như không phụ thuộc vào nền tảng hay ngôn ngữ lập trình.
WSDL
  • WSDL là viết tắt cho Web Services Description Language.
  • WSDL là một tài liệu dạng xml chứa các thông tin về web services như: method name, method parameter và làm thế nào để gọi web services đó.
  • WSDL là thành phần của UDDI, hoạt động giống như interface giữa các ứng dụng web service.
UDDI
  • UDDI là viết tắt cho Universal Description, Discovery and Integration.
  • UDDI là một framework dựa trên XML để mô tả - describing, khám phá - describing và tích hợp - integrating các web service.
  • UDDI là một thư mục chứa các interfaces của web service được mô tả bởi WSDL, chứa các thông tin về web services như tên phương thức, tham số truyền vào, cách gọi ... 

Friday, January 8, 2016

Bài 7 Java - Basic Datatypes Kiểu Dữ Liệu Cơ Bản

Trong Java kiểu dữ liệu được chia thành hai loại:
  • Các kiểu dữ liệu nguyên thủy (primitive)
  • Các kiểu dữ liệu tham chiếu (reference)
Primitive Data Types - Kiểu Dữ Liệu Nguyên Thủy

Có 8 kiểu dữ liệu nguyên thủy được hỗ trợ bởi Java. Các kiểu dữ liệu gốc này được tiền định nghĩa bởi ngôn ngữ và được định danh bởi một từ khóa như sau:

1. byte:
  • Dùng để lưu dữ liệu kiểu số nguyên có kích thước một byte (8 bit)
  • Giá trị nhỏ nhất là -128 (-2^7)
  • Giá trị lớn nhất là 127. (2^7 -1)
  • Giá trị mặc định là 0
  • Kiểu dữ liệu byte được sử dụng để lưu giữ khoảng trống trong các mảng lớn, chủ yếu là khoảng trống của các số nguyên. Một byte là nhỏ hơn so với một int khoảng 4 lần
  • Ví dụ: byte a = 100 , byte b = -50

2. short:
  • Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 2 byte (16 bit).
  • Giá trị nhỏ nhất là -32,768 (-2^15)
  • Giá trị lớn nhất là 32,767. (2^15 -1)
  • Kiểu dữ liệu short cũng có thể được sử dụng để tiết kiệm bộ nhớ như kiểu dữ liệu byte. Một short nhỏ hơn 2 lần so với một int
  • Giá trị mặc định là 0.
  • Ví dụ: short s = 10000, short r = -20000

3. int:
  • Dùng để lưu dữ liệu có kiểu số nguyên, kích cỡ 4 byte (32 bit).
  • Giá trị nhỏ nhất là - 2,147,483,648.(-2^31)
  • Giá trị lớn nhất là 2,147,483,647. (2^31 -1)
  • Nói chung, int được sử dụng như là kiểu dữ liệu mặc định cho các giá trị nguyên.
  • Giá trị mặc định là 0.
  • Ví dụ: int a = 100000, int b = -200000

4. long:
  • Dùng để lưu dữ liệu có kiểu số nguyên có kích thước lên đến 8 byte.
  • Giá trị nhỏ nhất là -9,223,372,036,854,775,808.(-2^63)
  • Giá trị lớn nhất là 9,223,372,036,854,775,807. (2^63 -1)
  • Kiểu này được sử dụng khi cần một dải giá trị rộng hơn int.
  • Giá trị mặc định là 0L.
  • Ví dụ: long a = 100000L, int b = -200000L

5. float:
  • Dùng để lưu dữ liệu có kiểu số thực, kích cỡ 4 byte (32 bit)
  • Kiểu Float được sử dụng chủ yếu để lưu bộ nhớ trong các mảng rộng hơn các số dấu chấm động.
  • Giá trị mặc định là 0.0f.
  • Kiểu Float không bao giờ được sử dụng cho các giá trị chính xác như currency.
  • Ví dụ: float f1 = 234.5f

6. double:
  • Kiểu dữ liệu double được sử dụng để lưu dữ liệu có kiểu số thực có kích thước lên đến 8 byte.
  • Nói chung, kiểu dữ liệu này được sử dụng như là kiểu mặc định cho các giá trị decimal.
  • Kiểu double không bao giờ được sử dụng cho các giá trị chính xác như currency.
  • Giá trị mặc định là 0.0d.
  • Ví dụ: double d1 = 123.4

7. boolean:
  • Độ lớn chỉ có 1 bit
  • Dùng để lưu dữ liệu chỉ có hai trạng thái true hoặc false
  • Giá trị mặc định là false.
  • Ví dụ: boolean one = true

8. char:
  • Dùng để lưu dữ liệu kiểu kí tự hoặc số nguyên không âm có kích thước 2 byte (16 bit)
  • Giá trị nhỏ nhất là '\u0000' (hoặc 0).
  • Giá trị lớn nhất là '\uffff' (hoặc 65,535).
  • Kiểu char được sử dụng để lưu bất kỳ ký tự nào
  • Ví dụ: char letterA ='A'

Reference Data Types - Kiểu dữ liệu tham chiếu trong Java

Các biến tham chiếu được tạo bởi sử dụng các constructor đã được định nghĩa của các lớp. Chúng được sử dụng để truy cập các đối tượng. Những biến này được khai báo ở kiểu cụ thể mà không thể thay đổi. Ví dụ: Employee, Puppy, …
Giá trị mặc định của bất kỳ biến đối tượng nào là null
Một biến đối tượng có thể được sử dụng để tham chiếu tới bất kỳ đối tượng nào trong kiểu được khai báo hoặc bất kỳ kiểu tương thích nào.
Ví dụ: Animal animal = new Animal("giraffe");

Ép kiểu (Type casting)

Có thể bạn sẽ gặp tình huống khi cộng một biến có dạng integer với một biến có dạng float. Để xử lý tình huống này, Java sử dụng tính năng ép kiểu (type casting) của các phần mềm trước đó C, C++. Lúc này một kiểu dữ liệu sẽ chuyển đổi sang kiểu khác. Khi sử dụng tính chất này, bạn cần thận trọng vì khi điều chỉnh dữ liệu có thể bị sai giá trị.

Đoạn mã sau đây thực hiện phép cộng một giá trị dấu phẩy động (float) với một giá trị nguyên (integer):

float c=34.896751f;
Int b = (int)c; // ép kiểu float sang Int
Int c = b + 10;

Java Literals:
Ngôn ngữ Java hỗ trợ vài trình tự thoát ra đặc biệt cho String và char như sau:

NotationCharacter represented
\nNewline (0x0a)
\rCarriage return (0x0d)
\fFormfeed (0x0c)
\bBackspace (0x08)
\sSpace (0x20)
\ttab
\"Double quote
\'Single quote
\\backslash
\dddOctal character (ddd)
\uxxxxHexadecimal UNICODE character (xxxx)

Bài 6: Từ Khóa Trong Java

1. Java Keywords: Từ khóa riêng trong Java, trong Java các từ khóa này không được sử dụng để đặt tên cho tên constant, tên variable hoặc cho các định danh khác.


abstractassertbooleanbreak
bytecasecatchchar
classconstcontinuedefault
dodoubleelseenum
extendsfinalfinallyfloat
forgotoifimplements
importinstanceofintinterface
longnativenewpackage
privateprotectedpublicreturn
shortstaticstrictfpsuper
switchsynchronizedthisthrow
throwstransienttryvoid
volatilewhile

Đối với các từ khóa này làm nhiều sẽ quen, trong eclipse hoặc netbean code đến từ khóa nó đổi màu => các bạn không phải lo lắng hay rối trí khi nhiều từ khóa như vậy

2. Comments trong Java
public class MyFirstJavaProgram{
//comment nhiều dòng
   /* This is my first java program.
    * This will print 'Hello World' as the output
    * This is an example of multi-line comments.
    */

    public static void main(String []args){
//comment một dòng
       // This is an example of single line comment
       /* This is also an example of single line comment. */
       System.out.println("Hello World"); 
    }
} 

3. Using Blank Lines: Dòng chỉ chứa  white space hoặc comment được hiểu như dòng trống

4. Java Modifiers:
Cũng như các ngôn ngữ khác, java cung cấp khả năng truy cập và modify classes, methods, etc., có hai dạng modifiers như sau:

  • Access Modifiers: default, public , protected, private
  • Non-access Modifiers: final, abstract, strictfp

Bài 5 Java - Cú pháp cơ bản

Ở bài học trước chúng ta đã tạo chương trình Hello World đơn giản http://javadevexpress.blogspot.com/2015/12/bai-2-cai-at-cac-cong-cu-chuong-trinh.html vậy ở bài này chúng ta sẽ nhìn lại và đi xem xét những cú pháp cơ bản trong Java.

Về cơ bản thì một chương trình Java được định nghĩa giống như tập hợp các đối tương (Object) và các Object giao tiếp với nhau bằng cách gọi các hàm, phương thức của nhau (Methods)

1. Bây giờ chúng ta đi xem xét ý nghĩa của class, object, methods và instance variables:

  • Object -  Một đối tượng là một thể hiện của một lớp, đối tượng có trạng thái và hành vi.               Ví dụ:
    • Con chó có trạng thái hay nói cách khác là thuộc tính (màu sắc, tên, giống chó ...)
    • Con chó có các hành vi (vẫy đuôi, sủa, ăn ...)
  • Class - Một lớp được định nghĩa như một mẫu mô tả hành vi và các thuộc tính của đối tượng.
public class Dog{
   String breed;
   int ageC
   String color;

   void barking(){
   }
   
   void hungry(){
   }
   
   void sleeping(){
   }
}
  • Methods - Một phương thức đơn giản là một hành vi. Một lớp có thể có nhiều phương thức.
  • Instance Variables - Mỗi thuộc tính của đối tượng được tạo ra bởi các giá trị được gán cho biến.

               Ví dụ: Con chó có thuộc tính màu xanh và được gán cho biến như sau
                          String color = "mau xanh";

2. Cú pháp cơ bản trong JAVA - Basic Syntax: Đối với Java cần nhớ những điểm sau

  • Case Sensitivity - Java phân biệt chữ hoa chữ thường, Hello khác hello.
  • Class Names - Đối với tất cả tên class chữ cái đầu tiên phải viết chữ hoa. 

                        Ví dụ lớp: MyFirstJavaClass

  • Method Names - Đối với tất cả tên method chữ cái đầu tiên phải viết thường.     

                        Ví dụ hàm:  public void myMethodName()

  • Program File Name - Tên của file phải trùng với tên class. 

                       Ví dụ: tên class là "MyFirstJavaProgram" thì tên file lưu là "MyFirstJavaProgram.java"


  • public static void main(String args[]) - Đối với java core để bắt đầu chạy một chương trình bắt buộc phải chạy từ hàm main
3. Định danh trong Java - Java Identifiers
Tất cả các thành phần trong java đòi hỏi phải có tên: Tên Class, Tên Object, Tên Variable, Tên Method và các cái này được gọi là định danh.
  • Một số điểm cần chú ý khi đặt tên trong Java như sau:
  • Tên nên bắt đầu với các ký tự từ A đến Z, a đến z, $ và _
  • Sau ký tự đầu tiên các ký tự về sau tùy ý
  • Một từ khóa không thể được sử dụng để đặt tên (Từ khóa trong Java học bài sau)
  • Định danh trong Java phân biệt hoa thường
Định danh đúng: age, $salary, _value, __1_value
Định danh sai: 123abc, -salary