Tải bản đầy đủ (.pdf) (28 trang)

ỨNG DỤNG PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRIZ VÀ SCAMPER TRONG TIN HỌC

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (583.85 KB, 28 trang )

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#
!


MỤC LỤC
LỜI NÓI ĐẦU 4!
I.! Các nguyên lý sáng tạo khoa học được ứng dụng trong ngôn ngữ lập trình JAVA 5!
1.! Nguyên lý phân nhỏ và “tách riêng” 5!
2.! Nguyên lý phẩm chất cục bộ 6!
3.! Nguyên lý phản đối xứng 8!
4.! Nguyên lý kết hợp 9!
5.! Nguyên lý vạn năng 10!
6.! Nguyên lý chứa trong 11!
7.! Nguyên lý gây ứng suất sơ bộ 12!
8.! Nguyên lý thực hiện sơ bộ 12!
9.! Nguyên lý dự phòng 13!
10.! Nguyên lý đẳng thế 14!
11.! Nguyên lý đảo ngược 15!
12.! Nguyên lý năng động 16!
13.! Nguyên lý tác động theo chu kỳ 16!
14.! Nguyên lý quan hệ phản hồi 18!
15.! Nguyên lý sử dụng trung gian 19!
16.! Nguyên lý tự phục vụ 20!
17.! Nguyên lý sao chép (copy) 20!
18.! Nguyên lý đồng nhất 21!
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 23!
1.! Phương pháp SCAMPER 23!
2.! Ứng dụng SCAMPER trong quản lý dự án phần mềm 25!
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#3#
!
2.1! Phép thay thế - Subtitube 25!

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

cách khoa học sáng tạo. Đặt biệt trong tin học, phương pháp sáng tạo giúp chúng ta
định hướng tư duy, phát huy sáng tạo trong những trường hợp khó, và giải quyết vấn
đề một cách dễ dàng hơn, hệ thống hơn.
Với môn học “phương pháp nghiên cứu khoa học trong tin học” giúp trang bị chúng
ta những phương pháp, nguyên lý giải quyết vấn đề khoa học hiệu quả nhất. Trong
bài thu hoạch này, em xin trình bày những nguyên lý sáng tạo của phương pháp
TRIZ được ứng dụng trong ngôn ngữ lập trình JAVA, và cách ứ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. Xin chân thành cảm ơn thầy Hoàng Kiếm đã trang bị những
kiến thức, kinh nghiệm quý báu và truyền cảm hứng sáng tạo cho chúng em trong
bước ngoặc nghiên cứu khoa học.




Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#5#
!
I. Các nguyên lý sáng tạo khoa học được ứng dụng trong ngôn ngữ lập
trình JAVA
1. Nguyên lý phân nhỏ và “tách riêng”
Nội dung:
• Chia một đối tượng thành nhiều phần độc lập
• Làm cho một đối tượng dễ dàng tháo rời
• Tăng mức độ chia nhỏ.
• Tách thành phần (đặc tính) gây cản trở khỏi đối tượng, hoặc chỉ lấy
thành phần (đặc tính) cần thiết của đối tượng.

Ứng dụng trong JAVA:

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

giúp cho người lập trình linh động hơn, chỉ cần sử dụng (import) và cài đặt
(implement) những thư viện cần thiết. Tách những thư viện không cần thiết ra
khỏi thư viện hiện hành để làm tăng khả năng thực thi, tiết kiệm không gian
lưu trữ và vùng nhớ.
Ví dụ: cấu trúc một dự án JAVA được chia nhiều packages như sau:


2. Nguyên lý phẩm chất cục bộ
Nội dung:
• Đổi cấu trúc của đối tượng từ đồng nhất sang không đồng nhất, đổi
môi trường bên ngoài (hoặc tác động bên ngoài) từ đồng nhất sang
không đồng nhất.
• Đặt mỗi thành phần của đố i tượng dươ ́i đ iều kiện hoạt động tối ưu.
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#7#
!
• Cho mỗi thành phần của đối tượng thực hiện một chức năng hữu ích
khác nhau.

Ứng dụng trong JAVA:
JAVA là ngôn ngữ lập trình hướng đối tượng, được chia nhỏ thành những lớp
(class) khác nhau. Với tính kế thừa và đa hình của JAVA, mỗi lớp có những
phương thức riêng, cách ứng xử riêng và những phương thức chung, tính
năng chung được kế thừa sử dụng lại từ lớp cha. Ngoài ra, lớp còn có những
phương thức cục bộ không chia sẽ dữ liệu với các lớp khác. Đây là tính đóng
gói của JAVA.
Ví dụ:
public class Person {
private String firstName;

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 Thế Huynh – CHK7# Page#8#
!
this.faculty = faculty;
}

public String getStudentId() {
return studentId;
}
public String getFaculty() {
return faculty;
}
public void registerCourse(Course course){
// here local variable
boolean isAllowed = isAllowedToRegister();
if(isAllowed){
listOfCourse.add(course);
}
}
// here local method
private boolean isAllowedToRegister(){
return listOfCourse.size()<20?true:false;
}

}
!
3. Nguyên lý phản đối xứng
Nội dung:
• Đổi hình dạng của đối tượng từ đối xứng sang bất đối xứng.
• Nếu một đối tượng đã bất đối xứng, tăng mức độ bất đối xứng của nó.


Ứ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.

out
.println("Firstname: " + person.getFirstName());
System.
out
.println("Lastname: " + person.getLastName());
System.
out
.println("Birthday: " + person.getBirthday());

if(person instanceof Student){
Student student = (Student) person;
System.
out
.println("Faculty: " +
student.getFaculty());
}
}
}


4. Nguyên lý kết hợp
Nội dung:
• Đặt các đối tượng tương đồng hoặc tương tự lại gần nhau (hoặc kết
hợp chúng); lắp ghép các thành phần tương đồng hoặc tương tự để
thực hiện các tác vụ song song.
• Cho các tác vụ nối tiếp hoặc song song với nhau; đặt chúng gần nhau
về mặt thời gian.





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

}


@Override
public void doMethodA() {
// TODO Coding here

}
}

5. Nguyên lý vạn năng
Nội dung:
• Cho một thành phần hoặc một đối tươ ̣ng thực hiện nhiều chức năng;
loại bỏ các thành phần khác.



Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#11#
!
Ứng dụng trong JAVA:
Một chư ơng trình viết bằng JAVA có thể chạy trên nhiều máy tính có hệ điều
hành khác nhau Windows, Unix, Linux,…Viết mộ t lần chạy mọi nơi “Write
one run everywere”
Nền tảng JAVA SE 7 cho phép JAVA có thể làm việc với nhiều ngôn ngữ lập
trình khác nhau. JVM có thể chạy nhiều ngôn ngữ khác nhau và chúng tồn tại
hài hoà với JAVA.
6. Nguyên lý chứa trong
Nội dung:
• Đặt một đối tượng vào trong đối tượng khác; đặt mỗi đối tượng lận
lượt vào trong nhau.
• Cho một thành phần đi qua khoảng trống của thành phần khác.


Ứ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:

Việc xử lý ngoại lệ (Exception) có thể ngăn chặn và giải quyết được rất nhiều
lỗi ngoài ý muốn trong lúc lập trình. Người lập trình có thể ném lỗi (throw)
và dừng ngay chương trình nếu xảy ra những trường hợp không phù hợp với
logic hoặc gây hại chương trình.
Ví dụ:
public void registerCourse(Course course) throws Exception{
// not allowed to register course that doesn't belong to faculty
if(!course.getCourseType().equals(faculty)){
throw new Exception("Not allowed to register this course.");
}

// here local variable
boolean isAllowed = isAllowedToRegister();
if(isAllowed){
listOfCourse.add(course);
}
}

8. Nguyên lý thực hiện sơ bộ
Nội dung:
• Thực hiện trước thay đổi cần thiết trên đối tượng (toàn bộ hoặc một
phần).
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#13#
!
• Sắp xếp trước các đối tượng để chúng có thể đi vào hoạt động từ vị trí
thuận tiện nhất và không mất thời gian chờ.


Ứ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;
}


public String getStudentId() {
return studentId;
}

public String getFaculty() {
return faculty;
}
}

9. Nguyên lý dự phòng
Nội dung:
• Chuẩn bị trước các phương án khẩn cấp để bù đắp cho độ thiếu tin cậy
của đối tượng.
Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#14#
!
Ứng dụng trong JAVA:
Sử dụng Try-Catch trong lập trình để xử lý ngoại lệ (exception), và thực hiện
phương án khác nếu có lỗi xảy ra.
Ví dụ:
Student student = new Student("001122","Huynh","Dang",null,"MATH");
Course course = null;
try {
// register IT course
course = new Course("IT","001","CSDL Nang Cao");
s.registerCourse(course);
} catch (Exception e) {
// if Student is not allowed to register this course,
// then try to register another one of MATH.

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#
!

Đặng Thế Huynh – CHK7# Page#15#
!
}

private static InitialContext createContext() throws NamingException {
Properties env = new Properties();
env.put(Context.
INITIAL_CONTEXT_FACTORY
,
"com.sun.jndi.rmi.registry.RegistryContextFactory");
env.put(Context.
PROVIDER_URL
, "rmi://localhost:1099");
InitialContext context = new InitialContext(env);
return context;
}

11. Nguyên lý đảo ngược
Nội dung:
• Đảo ngược hành động dùng để giải quyết vấn đề
• Cho các thành phần di chuyển đư ợc thành cố định, và các thành phần
cố định thành di chuyển được.
• Lật ngược đối tượng (hoặc quá trình)

Ứng dụng trong JAVA:
Phương thức Collections.reverse(List<?> list) được sử dụng để đảo ngược
thứ tự của các phần tử trong danh sách.
Ví dụ:
// create array list object
ArrayList<String> arrlst = new ArrayList<String>();


// 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

ngoài hay quá trình có thể chuyển sang chế độ tối ưu hoặc tìm ra điều
kiện hoạt động tối ưu.
• Chia đối tượng thành các thành phần có thể chuyển động tương đối với
nhau.
• Nếu một đối tượng (hoặc quá trình) cố định hay thiếu linh động thì
làm cho nó di chuyển hoặc tự thích nghi đượ c.

Ứng dụng trong JAVA:
Kiểu dữ liệu Map<key,value> lưu dữ liệu dướ i dạng <key,value>, có thể lưu
trữ bấ t kỳ kiểu đối tượng nào và có thể tách rời thành 2 danh sách chứa toàn
key hoặc toàn value.
Ví dụ:
Map map = new HashMap();
map.put("key1", new Person());
map.put("key2", new Student());
map.put("key3", new Integer(1000));
map.put("key3", "Sunday");

// get keys only
map.keySet();

// get values only
map.values();

13. Nguyên lý tác động theo chu kỳ
Nội dung:
• Thay vì hành động liên tục thì hành động theo chu kỳ hoậc theo nhịp.
• Nếu một hành động đã có tính chu kỳ thì tăng mức độ hoặc tần số của
nó.
Phương pháp nghiên cứu khoa học trong tin học#

!
Đặ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.

*/
public void run(){
//toy implementation
System.
out
.println("Fetching mail ");
}

// PRIVATE ////

//expressed in milliseconds
private final static long
fONCE_PER_DAY
= 1000*60*60*24;

private final static int
fONE_DAY
= 1;
private final static int
fFOUR_AM
= 4;
private final static int
fZERO_MINUTES
= 0;

private static Date getTomorrowMorning4am(){
Calendar tomorrow = new GregorianCalendar();
tomorrow.add(Calendar.
DATE
,

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

thiện quá trình hoặc hành động.
• Nếu thông tin phản hồi đã đ ư ơ ̣c dùng thì thay đổi mức độ hoặc ảnh
hưởng của nó.

Ứng dụng trong JAVA:
JDBC khi cập nhật (update) cơ sở dữ liệu (database) đều trả về kết quả là bao
nhiêu row được update thành công. Dựa và kết quả này ta có thể thực hiện
những hành động phù hợp tiếp theo. Ví dụ, nếu kết quả câu lệnh update trả về
kết quả 0 row nào được update, như vậy nó (item) chưa có trong database ta
tiến hành insert mới.
Ví dụ:

public static void main( String args[] ){
try{
// Load the database driver
Class.
forName
( "sun.jdbc.odbc.JdbcOdbcDriver" ) ;

// Get a connection to the database
Connection conn = DriverManager.
getConnection
( "jdbc:odbc:Database" ) ;

// Get a statement from the connection
Statement stmt = conn.createStatement() ;

// Execute the Update
int rows = stmt.executeUpdate("
UPDATE Cust SET CUST_NO = 9842 WHERE CUST_NO = 9841" ) ;


// 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

Nội dung:
• Sử dụng vậ t thể truyền tải trung gian hoặc quá trình trung gian.
• Tạm thời kết hợp đối tượng với một đối tượng khác mà có thể dễ dàng
tháo bỏ.

Ứng dụng trong JAVA:
Hai đối tư ợng (object) khác nhau được xem là cùng kiểu dữ liệu khi chúng
cài đặt (implements) cùng một interface.
Ví dụ:
public interface MidInterface {
public void doSonething();
}

public class ClassA implements MidInterface {

@Override
public void doSonething() {
// TODO Auto-generated method stub

}
}

public class ClassB implements MidInterface{

@Override
public void doSonething() {
// TODO Auto-generated method stub

}
}




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)

Nội dung:
• Thay vì sử dụng đối tượng hiếm, đắt tiền, dễ vỡ thì dùng bản sao đơn
giản và rẻ tiền hơn.
• Thay thế đối tượng hoặc quá trình bằng bản sao quang học.
• Nếu bản sao quang học đã được dùng thì chuyển sang bản sao hồng
ngoại hoặc cực tím.



Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#21#
!
Ứng dụng trong JAVA:
Với tính kế thừa của lập trình hướng đối tượng JAVA, lớp con được thừa
hưởng tất cả các phương thức của lớp cha, và có thể override bất kỳ phương
thức nào khi cần.
Ví dụ:
public class ParentClass {
public void doSomething(){
System.
out
.println("ParentClass");
}
}


public class ChildClass extends ParentClass{

@Override

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 {


public abstract String getFirstName();
public abstract String getLastName();
public abstract List<Course> registerCourse(Course course);

}

public class Student extends 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;
}

}

public class Teacher extends 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:
!

!
SUBSTITUTE
Suy nghĩ về việc thay thế một phần của qui trình (sản phẩm)
cho một cái gì đó khác. Bằng cách tìm kiếm cái gì đó để thay
thế chúng ta có thể phát hiện được những ý tưởng mớ i. Những
câu hỏi áp dụng:
• Những gì có thể thay thế để làm cải tiến?
• Chuyện gì xảy ra nếu trao đổi cái này với cái kia?
• Làm thế nào có thể thay thế vị trí, thời gian, vật liệu,
hoặc con người

Phương pháp nghiên cứu khoa học trong tin học#
!
Đặng Thế Huynh – CHK7# Page#24#
!
COMBINE
Suy nghĩ về việc kết hợp 2 hay nhiều phần để đạt được một
sản phẩm (qui trình) khác hoặc tăng cường sức mạnh tổng
hợp. Những câu hỏi áp dụng:
• Những vật liệu, tính năng, qui trình, con người, sản phẩm or
thành phần nào có thể kết hợp?
• Vị trí nào, bộ phậ n nào có thể xây dựng sức mạnh tổng hợp?

ADAPT

Suy nghĩ về những bộ phận nào của sản phẩm (qui trình) có
thể được điều chỉnh hoặc suy nghỉ về cách có thể thay đổi bản
chất của sản phẩm (qui trình). Những câu hỏi áp dụng:
• Bộ phận nào của sản phẩm có thể thay đổi?
• Và trôi đổi với những gì?

• 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

thông thường?
REVERSE
Suy nghĩ về những gì có thể làm nếu một bộ phận của sản
phẩm (qui trình) làm việc đảo ngược hoặc trong một thứ tự
khác so với cách thông thường. Suy nghĩ đảo ngược như vậy
giúp ta có cách nhìn vấn đề nhiều hướ ng khác nhau và có thể
pháp hiện được ý tưởng mới. Những câu hỏi áp dụng:
• Điều gì xảy ra nếu ta làm nó theo cách đảo ngược, khác với
cách nó đang được sử dụng?
• Làm thế nào để có thể đạt được các hiệu ứng ngược lại?
!
2. Ứng dụng SCAMPER trong quản lý dự án phần mềm
2.1 Phép thay thế - Subtitube
Kết quả thành công của một dự án phụ thuộc vào hiệu quả làm việc của từng
thành viên. Cần phải nhanh chóng pháp hiện kịp thời và phân công, thay đổi
nhân sự của nhóm cho phù hợp với năng lực, kỷ năng của từng thành viên.
Việc thay đổi có thể là thay đổi người mới hoàn toàn hoặc thay đổi vị trí chức
vụ, nhiệm vụ của các thành viên trong nhóm cho nhau, thậm chí phải thay
đổi người quản lý dự án.

×