Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#1#
!
!
ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN - PHÒNG SAU ĐẠI HỌC !
BÀI THU HOẠCH
PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG TIN HỌC
ỨNG DỤNG PHƯƠNG PHÁP NGHIÊN CỨU
KHOA HỌC TRIZ VÀ SCAMPER TRONG TIN
HỌC
!
!
!
!
!
Giáo viên hướng dẫn: GS.TSKH. HOÀNG KIẾM
Sinh viên thực hiện: ĐẶNG THẾ HUYNH
MSSV: CH1201035 - Khóa 7 TP Hồ Chí Minh, Tháng 4 Năm 2013
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#2#
!
2.2! Phép kết hợp – Combine 26!
2.3! Phép thích ứng – Adapt 26!
2.4! Phép điều chỉnh – Modify 26!
2.5! Phép thêm vào – Put 26!
2.6! Phép loại bỏ - Eliminate 27!
2.7! Phép đảo ngược – Reverse/Rearrange 27!
KẾT LUẬN 27!
TÀI LIỆU THAM KHẢO: 28! Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#4#
!
LỜI NÓI ĐẦU
!
Trong mỗi con người luôn tồn tại những mặt đối lập: tốt – xấu; thiện – ác; sáng tạo –
thụ động. Nói về tư duy sáng tạo, chúng hiện hữu như một nhân tố bẩm sinh trong
con người. Nói cách khác ai cũng có khả năng sáng tạo, nhưng do tính trì trệ thụ
động quá lớn đã đè ép cơ hội thắp sáng những tia sáng tạo; hoặc chúng ta không có
phương pháp, không vận dụng đúng phương pháp sáng tạo để giải quyết vấn đề một
JAVA được tổ chức phân nhỏ thành nhiều gói (package) khác nhau, mỗi
package gồm nhiều lớp (class) cùng thực hiện một chức năng cụ thể. Việc
chia nhỏ package giúp cho ứng dụng JAVA dễ phát triển mở rộng và dễ bảo
trì. Package cũng giúp chia nhỏ JAVA thành nhiều phần độc lập để học tập
nghiên cứu dễ dàng hơn. Sau đây là những package có sẵn của JAVA:
Gói
Mô tả
java.lang
Không cần phải khai báo nhập. Gói này luôn được nhập
cho bạn.
java.io
Bao gồm các lớp để trợ giúp cho bạn tất cả các thao tác
vào ra đọc.
java.applet
Bao gồm các lớp để bạn cần thực thi một applet trong
trình duyệt.
java.awt
Các thành phần để xây dựng giao diện đồ hoạ (GUI).
java.util
Cung cấp nhiều lớp và nhiều giao diện tiện ích khác
nhau, như là các cấu trúc dữ liệu, lịch, ngày tháng, v.v
java.net
Cung cấp các lớp và các giao diện cho việc lập trình
mạng TCP/IP.
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#6#
!
JAVA chia nhỏ và tách riêng package thành nhiều thu viện nhỏ khác nhau
private String lastName;
private Date birthday;
public Person(String firstName, String lastName, Date birthday) {
this.firstName = firstName;
this.lastName = lastName;
this.birthday = birthday;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public Date getBirthday() {
return birthday;
}
}
public class Student extends Person{
private String studentId;
private String faculty;
private List<Course> listOfCourse = new ArrayList<Course>();
public Student(String studentId, String firstName,
String lastName, Date birthday, String faculty) {
super(firstName, lastName, birthday);
this.studentId = studentId;
Phương pháp nghiên cứu khoa học trong tin học#
!
Ứng dụng trong JAVA:
Tính đa hình trong JAVA cho phép ép kiểu dữ liệu, từ đối tượng con thành
đối tượng cha, để chỉ sử dụng những phương thức của lớp cha. Và nhờ đó ta
có thể tạ o được một danh sách đồng nhất kiểu dữ liệ u với lớp cha. Toán tử
instanceof cho phép kiểm tra kiểu dữ liệu thực sự được khởi tạo của một đối
tượng và ta có thể ép kiểu ngược lại từ lớp cha thành lớp con.
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#9#
!
Ví dụ:
public static void main(String[] args){
//init Person object as Student
Person p = new Student();
p.getFirstName();
//Cast Person to Student
Student s = (Student)p;
s.registerCourse(new Course());
Collection<Person> list = new ArrayList<Person>();
list.add(new Person());
list.add(new Student());
for(Person person : list){
System.
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#10#
!
Ứng dụng trong JAVA:
Một lớ p trong JAVA có thể được thiết kế cài đặt (implements) kết hợp nhiều
giao diện (interface) khác nhau để tổng hợp nhiều phương thức, tính năng
trong cùng một lớp.
Ví dụ:
public interface InterfaceA {
public void doMethodA();
}
public interface InterfaceB {
public void doMethodB();
}
public class ClassImpl implements InterfaceA, InterfaceB{
public void doMethod() {
}
@Override
public void doMethodB() {
// TODO Coding here
}
Ứng dụng trong JAVA:
JAVA cho phép tạo một lớp (outer class) chứa một hay nhiều lớp khác (inner
class)
Ví dụ:
public class OuterClass {
public void outerMethod(){
}
public class InnerClass{
public void innerMethod(){
}
}
}
!
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#12#
!
7. Nguyên lý gây ứng suất sơ bộ
Nội dung:
• Nếu cần thiết phải thực hiện một hành động với tác động có hại lẫn có
ích, hành động này nên được thay thế bằng hành động ngược lại để
kiểm soát tác động có hại.
• Tạo một áp lực ban đầu lên đối tượng để phản lại áp lực không mong
muốn khi hoạt động.
Ứng dụng trong JAVA:
Khi khởi tạo một đối tượng, dữ liệu của biến static được tạo trước, sau đó
mới chạy hàm tạo (constructor) để cấp phát một chịa chỉ vùng nhớ mới cho
đối tượng. Như vậy đối tượng mới được chuẩ n bị trư ớ c đầ y đủ dữ liệu.
Ví dụ:
public class Student extends Person{
private String studentId;
private String faculty;
// required courses for a Student, don't need to register
static List<Course>
listOfCourse
= new ArrayList<Course>();
static{
listOfCourse
.add(new Course("IT","001","Triet Hoc"));
listOfCourse
.add(new Course("IT","002","PPNCKH"));
}
public Student(String studentId, String firstName,
String lastName, Date birthday, String faculty) {
super(firstName, lastName, birthday);
this.studentId = studentId;
this.faculty = faculty;
}
course = new Course("MATH","011","CSDL Co Ban");
s.registerCourse(course);
}finally{
System.
out
.println("Just registered course: " + course.getCourseName());
}
10. Nguyên lý đẳng thế
Nội dung:
• Trong trường thế năng, hạn chế thay đổi vị trí; thay đổi điều kiện hoạt
động để loại bỏ việc nâng lên hay hạ xuống trong điều kiện trọng lực.
Ứng dụng trong JAVA:
Tạo Connection Pool giúp duy trì connection khi kế t nối với database, việc sử
dụng connection sẵn có, không cần tạo lại kết nối nhiều lần với database giúp
giảm thiểu băng thông kết nối và làm tăng hiệu quả (performance) của ứng
dụng, giúp chương trình chạy nhanh hơn.
Ví dụ:
private static Connection getConnection() throws NamingException, SQLException {
InitialContext initCtx =
createContext
();
String jndiName = "HrDS";
ConnectionPoolDataSource dataSource =
(ConnectionPoolDataSource) initCtx.lookup(jndiName);
PooledConnection pooledConnection = dataSource.getPooledConnection();
return pooledConnection.getConnection(); // Obtain connection from pool
Phương pháp nghiên cứu khoa học trong tin học#
!
// populate the list
arrlst.add("A");
arrlst.add("B");
arrlst.add("C");
arrlst.add("D");
arrlst.add("E");
// [A, B, C, D, E]
System.
out
.println("The initial list is :"+arrlst);
// reverse the list
Collections.
reverse
(arrlst);
// [E, D, C, B, A]
System.
out
.println("The Reverse List is :"+arrlst);
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#16#
!
12. Nguyên lý năng động
Nội dung:
• Cho phép (hoặc thiết kế) các đặc tính của đối tươ ̣ng, môi trường bên
!
Đặng Thế Huynh – CHK7# Page#17#
!
• Dùng khoảng nghỉ giữa các xung để thực hiện hành động khác.
Ứng dụng trong JAVA:
TimerTask dùng để lập trình một hành động nào đó thực thi (chạy) theo chu
kỳ.
Ví dụ:
public final class FetchMail extends TimerTask {
/**
* Construct and use a TimerTask and Timer.
*/
public static void main (String arguments ) {
TimerTask fetchMail = new FetchMail();
//perform the task once a day at 4 a.m., starting tomorrow morning
//(other styles are possible as well)
Timer timer = new Timer();
timer.scheduleAtFixedRate(fetchMail,
getTomorrowMorning4am
(),
fONCE_PER_DAY
);
}
/**
* Implements TimerTask's abstract run method.
fONE_DAY
);
Calendar result = new GregorianCalendar(
tomorrow.get(Calendar.
YEAR
),
tomorrow.get(Calendar.
MONTH
),
tomorrow.get(Calendar.
DATE
),
fFOUR_AM
,
fZERO_MINUTES
);
return result.getTime();
}
}
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#18#
!
14. Nguyên lý quan hệ phản hồi
Nội dung:
• Đưa vào thông tin phản hồi (tham chiếu ngược, kiểm tra chéo) để cải
// Print how many rows were modified
// if rows=0, then go to insert new
System.
out
.println( rows + " Rows modified" ) ;
if(rows == 0){
stmt.executeUpdate("
INSERT INTO Cust values('9842','9841','','' ) ");
}
// Close the statement and the connection
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#19#
!
stmt.close() ;
conn.close() ;
}catch( SQLException se ){
System.
out
.println( "SQL Exception:" + se ) ;
}catch( Exception e ){
System.
out
.println( e ) ;
}
}
15. Nguyên lý sử dụng trung gian
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#20#
!
public static void main(String[] args) throws Exception{
List<MidInterface> list = new ArrayList<MidInterface>();
MidInterface classA = new ClassA();
list.add(classA);
MidInterface classB = new ClassB();
list.add(classB);
}
16. Nguyên lý tự phục vụ
Nội dung:
• Làm cho đối tương tự phục vụ nó bằng cách thực hiện các chức năng
có ích bổ trợ.
• Sử dụng tài nguyên, năng lượng hoặc chất thải bỏ đi.
Ứng dụng trong JAVA:
Trong chương trình Java, lập trình viên không còn phải quan tâm quá nhiều
đến việc giải phóng bộ nhớ, chương trình Garbage Collector của Java sẽ thực
hiện việc này một cách tự động. Cứ sau một khoảng thời gian nhất định,
Garbage Collector sẽ xem xét những vùng nhớ không còn dùng đến để giải
phóng.
17. Nguyên lý sao chép (copy)
public void doSomething(){
// copy here what ParentClass did first
super.doSomething();
// adding code here to do specific some things for ChildClass
System.
out
.println("Adding more code here.");
}
}
!
18. Nguyên lý đồng nhất
Nội dung:
• Làm cho đối tượng tương tác với một đối tượng cùng vật liệu hoặc vật
liệu có tính chất tương đồng.
Ứng dụng trong JAVA:
Tính trừu tượng (abstract) giúp thiết kế hướng đối tượ ng trong JAVA được
đồng nhất. Bất kỳ lớp nào kế thừa lớp abstract bắt buộc phải override những
phương thức abstract của lớp cha. Phương thức override phải giống nhau
chính xác <kiểu dữ liệu> <tên phương thức><tham số>
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#22#
!
Ví dụ:
public abstract class Person {
@Override
public String getFirstName() {
// TODO code here
return null;
}
@Override
public String getLastName() {
// TODO code here
return null;
}
@Override
public List<Course> registerCourse(Course course) {
// TODO code here
return null;
}
}
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#23#
!
II. Ứng dụng phương pháp SCAMPER trong quả n lý dự án phần mềm
để tìm kiếm giải pháp cải thiện hiệu quả làm việc của nhóm
1. Phương pháp SCAMPER
Được phát triển bỡi Bob Eberle năm 1991, SCAMPER được viết tắt của 7
chữ cái như sau:
!
• Chuyện gì xảy ra nếu thay đổi đặc tính của một thành phần?
MODIFY
Suy nghĩ về việc thay đổi một phần hay toàn bộ tình hình hiện
tại, hoặc điều chỉ nh thay đổi nó một cách bất thường. Bằng
cách tìm tồi, suy nghĩ về cách làm việc mới, chúng ta thường
có được sản phẩn (qui trình) thay thế. Những câu hỏi áp dụng:
• Điều gì xả y ra nếu làm biến đổi tính năng hoặc thành phần
của sản phẩm (qui trình)?
• Điều gì sẽ xảy ra nếu điều chỉnh qui trình một cách nào đó?
PUT TO
ANOTHER USE
Suy nghĩ về cách có thể sử dụng giải pháp/sản phẩm/qui trình
hiện tại cho mục đích. Chúng ta cũng có thể suy nghĩ về một
cách khác khi giải quyết vấn đề hoặc tìm kiế m một thị trường
khác cho sản phẩm. Những câu hỏi áp dụng:
• Thị trường nào khác có thể sử dụng sản phẩm này?
• Loại người nào khác có thể sử dụng được nó?
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#25#
!
ELIMINATE
Suy nghĩ về những gì có thể xảy ra nếu chúng ta loại bỏ các
bộ phận khác nhau của sẩn phẩm (qui trình), xem xét những gì
chúng ta có thể làm trong hoàn cảnh đó, và xem xét nhiều
cách khác khi giải quyết vấn đề. Những câu hỏi áp dụng:
• What would happen if I removed a component or part of it?
• Điều gì xả y ra nếu ta gỡ bỏ một thành phần hoặc bộ phận
của nó?
• Cách nào khác ta có thể đạt được giải pháp ngoài cách