Hiển thị các bài đăng có nhãn Kỹ năng CNTT. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Kỹ năng CNTT. Hiển thị tất cả bài đăng

Thứ Tư, 9 tháng 1, 2013

DESIGN PATTERN là gì???????


DESIGN PATTERN là gì
Trong phát triển phần mềm hiện đại, kiến trúc tổng thể của dự án đóng một vai trò quan trọng, đặc biệt với bộ khung (framework) và mẫu thiết kế (design pattern). Bài viết này sẽ giúp các bạn hiểu được một cách tổng quan về pattern cũng như cách thức thiết kế một số pattern tiêu biểu.
PATTERN là gì?
Pattern mô tả một giải pháp chung đối với một vấn đề nào đó trong thiết kế thường được “lặp lại” trong nhiều dự án. Nói một cách khác, một pattern có thể được xem như một “khuôn mẫu” có sẵn áp dụng được cho nhiều tình huống khác nhau để giải quyết một vấn đề cụ thể. Trong bất kỳ hệ thống phần mềm hướng đối tượng nào chúng ta cũng có thể bắt gặp các vấn đề lặp lại.
Đặc điểm chung:
• Pattern được hiểu theo nghĩa tái sử dụng ý tưởng hơn là mã lệnh. Pattern cho phép các nhà thiết kế có thể cùng ngồi lại với nhau và cùng giải quyết một vấn đề nào đó mà không phải mất nhiều thời gian tranh cãi. Trong rất nhiều trường hợp, dự án phần mềm thất bại là do các nhà phát triển không có được sự hiểu biết chung trong các vấn đề về kiến trúc phần mềm. Ngoài ra, pattern cũng cung cấp những thuật ngữ và khái niệm chung trong thiết kế. Nói một cách đơn giản, khi đề cập đến một pattern nào đấy, bất kỳ ai biết pattern đó đều có thể nhanh chóng hình dung ra “bức tranh” của giải pháp. Và cuối cùng, nếu áp dụng pattern hiệu quả thì việc bảo trì phần mềm cũng được tiến hành thuận lợi hơn, nắm bắt kiến trúc hệ thống nhanh hơn.
• Pattern hỗ trợ tái sử dụng kiến trúc và mô hình thiết kế phần mềm theo quy mô lớn. Cần phân biệt design pattern với framework. Framework hỗ trợ tái sử dụng mô hình thiết kế và mã nguồn ở mức chi tiết hơn. Trong khi đó, design pattern được vận dụng ở mức tổng quát hơn, giúp các nhà phát triển hình dung và ghi nhận các cấu trúc tĩnh và động cũng như quan hệ tương tác giữa các giải pháp trong quá trình thiết kế ứng dụng đối với một chuyên khu riêng biệt.
• Pattern đa tương thích. Pattern không phụ thuộc vào ngôn ngữ lập trình, công nghệ hoặc các nền tảng lớn như J2EE của Sun hay Microsoft .NET Framework.
Tiềm năng ứng dụng của pattern là rất lớn. Các thiết kế dựa trên pattern được sử dụng khá nhiều ở các phần mềm mã nguồn mở, trong nền tảng J2EE hoặc .NET… Trong các dạng ứng dụng này, có thể dễ dàng nhận ra một số tên lớp chứa các tiền tố hoặc hậu tố như Factory, Proxy, Adapter…
PHÂN LOẠI PATTERN
Pattern được phân loại ra làm 3 nhóm chính sau đây:
• Nhóm cấu thành (Creational Pattern): Gồm Factory, Abstract Factory, Singleton, Prototype, Builder… Liên quan đến quá trình khởi tạo đối tượng cụ thể từ một định nghĩa trừu tượng (abstract class, interface).
• Nhóm cấu trúc tĩnh (Structural Pattern): Gồm Proxy, Adapter, Wrapper, Bridge, Facade, Flyweight, Visitor… Liên quan đến vấn đề làm thế nào để các lớp và đối tượng kết hợp với nhau tạo thành các cấu trúc lớn hơn.
• Nhóm tương tác động (Behavioral Pattern): Gồm Observer, State, Command, Iterator… Mô tả cách thức để các lớp hoặc đối tượng có thể giao tiếp với nhau.

Thứ Tư, 31 tháng 10, 2012


Recursion

Note:
(*) Means that students are required to understand essential features only (the problem explaination, definitions, the outline of algorithms…), not in details.

5.1. Recursive definition


1) A base case (anchor or the ground case) that does not contain a reference to its own type.
2) An inductive case that does contain a reference to its own type.
For example: Define the set of natural numbers

5.2. Recursive program/algorithm

A recursive program/algorithm is one that calls itself again.
There are three basic rules for developing recursive algorithms.
• Know how to take one step.
• Break each problem down into one step plus a smaller problem.
• Know how and when to stop.

public static void convertToBin(int decimalNum)
int quotient = decimalNum / 2;        // One step
     int remainder = decimalNum % 2;   // One step
     if (quotient > 0)
{convertToBin(quotient); // smaller problem
}
System.out.print(remainder); // after all recursive calls have been
// made last remainder printed first
}

5.3. Recursion application

  • Recursive definitions are used in defining functions or sequences of elements
  • Purpose of recursive definition:
    • Generating a new elements
    • Testing whether an element belongs to a set (*)
  • (*) The problem is solved by reducing it to a simpler problem
Example – factorial calculation

5.4. Method calls and recursion implementation

How does recursion actually work?
  • Each time a method is called, an activation record (AR) is allocated for it. This record usually contains the following information:
    • Parameters and local variables used in the called method.
    • A dynamic link, which is a pointer to the caller's activation record.
    • Return address to resume control by the caller, the address of the caller’s instruction immediately following the call.
    • Return value  for a method not declared as void. Because the size of the activation record may vary from one call to another, the returned value is placed right above the activation record of the caller.
  • Each new activation record is placed on the top of the run-time stack
  • When a method terminates, its activation record is removed from the top of the run-time stack
  • Thus, the first AR placed onto the stack is the last one removed

5.5. Direct recursion

5.5.1. Tail recursion

There is only one recursive call at the very end of a method implementation
class Main
{static void tail(int n)
{if(n >0)
{ System.out.print(n + "  ");          
tail(n-1);
}
}
public static void main(String [] args)
{tail(10);
System.out.println();
}
}
Output: 10  9  8  7  6  5  4  3  2  1

5.5.2. Non-Tail recursion

The recursive call is not at the very end of  a method implementation

public class Main
{public static void reverse() throws Exception
{char ch = (char) System.in.read();
if(ch != '\n')
{reverse();
System.out.print(ch);
}
}
public static void main(String [] args) throws Exception
{System.out.println("\nEnter a string to be reversed:");
reverse();
System.out.println("\n");
}
}

Running of the program:

5.6. Convert recursion implementation to iterative implementation using stack

public static void nonRecursiveReverse() throws Exception
{MyStack t = new MyStack();
char ch;
while(true)
{ch = (char) System.in.read();
if(ch == '\n') break;
t.push(ch);
}
while(!t.isEmpty())
System.out.print(t.pop());
}

5.7. Indirect recursion

  • If f() calls itself, it is direct recursive
  • If f() calls g(), and g() calls f(). It is indirect recursion. The chain of intermediate calls can be of an arbitrary length, as in:
                        f() -> f1() -> f2() -> ... -> fn() -> f()
  • Example: sin(x) calculation

5.8. Nested recursion

         

5.9. Excessive recursion


The tree of calls for fibo

5.10. More Examples

The Tower of Hanoi
  • Rules:
    • Only one disk may be moved at a time.
    • Each move consists of taking the upper disk from one of the rods and sliding it onto another rod, on top of the other disks that may already be present on that rod.
    • No disk may be placed on top of a smaller disk.
Source: http://en.wikipedia.org/wiki/Hanoi_tower


void moveDisks(int n, char fromTower, char toTower, char auxTower)
{if (n == 1) // Stopping condition
Move disk 1 from the fromTower to the toTower;
else
{moveDisks(n - 1, fromTower, auxTower, toTower);
move disk n from the fromTower to the toTower;
moveDisks(n - 1, auxTower, toTower, fromTower);
}
}

Drawing fractals

von Knoch snowflakes

  1. Divide an interval side into three even parts
  2. Move one-third of side in the direction specified by angle
    • Turn to the right 60° (i.e., turn –60°) and go forward one-third of side
    • Turn to the left 120° and proceed forward one-third of side
    • Turn right 60° and again draw a line one-third of side long


private void drawFourLines(double side, int level, Graphics g) {
if (level == 0) {
// arguments to sin() and cos() must be angles given in radians,
// thus, the angles given in degrees must be multiplied by PI/180;
pt.x = ((int)(Math.cos(angle*Math.PI/180)*side)) + currPt.x;
pt.y = ((int)(Math.sin(angle*Math.PI/180)*side)) + currPt.y;
g.drawLine(currPt.x, currPt.y, pt.x, pt.y);
currPt.x = pt.x;
currPt.y = pt.y;
}
else {                                  
drawFourLines(side/3.0,level-1,g);
left (60);
drawFourLines(side/3.0,level-1,g);
right(120);
drawFourLines(side/3.0,level-1,g);
left (60);
drawFourLines(side/3.0,level-1,g);
}
}

5.11. Recursion vs. Iteration

  • Some recursive algorithms can also be easily implemented with loops
    • When possible, it is usually better to use iteration, since we don’t have the overhead of the run-time stack (that we just saw on the previous slide)
  • Other recursive algorithms are very difficult to do any other way

5.12. Back tracking


In solving some problems, a situation arises where there are different ways leading from a given position, none of them known to lead to a solution. After trying one path unsuccessfully, we return to this crossroad and try to find a solution using another path. However, we must ensure that such a return is possible and that all paths can be tried. This technique is called backtracking. This technique is used in artificial intelligence, and one of the problems in which backtracking is very useful is the n-queens problem

Each choice leads to another set of choices. Make one choice and continue. If you reach a dead end, go back to previous choice and try next alternative.
putQueen(row)
for every position col on the same row
if position col is available
                                                place the next queen in position col;
if (row < n)
putQueen(row+1);
else success;
                                                remove the queen from position col;
source -

CF Department

Thứ Sáu, 14 tháng 9, 2012

Những khái niệm cơ bản của lập trình hướng đối tượng – Phần 3

Những khái niệm cơ bản của lập trình hướng đối tượng – Phần 3

Về mục đích, Lớp và Cấu trúc đều có chung một mục đích ban đầu, đó là nhóm một tập hợp các dữ liệu lại với nhau để xử lí đồng bộ và thống nhất: Cấu trúc nhóm các dữ liệu hay phải đi kèm với nhau lại thành một nhóm cho dễ xử lí. Tương tự, Lớp là tập hợp một số thuộc tính chung của đối tượng để xử lí.
2/- So sánh lớp và cấu trúc Trong phần này, chúng ta sẽ tiến hành so sánh Class (Lớp) và Structure (Cấu trúc) trên nhiều khía cạnh khác nhau:
♦ Mức khái niệm
♦ Mục đích và chức năng
♦ Về ưu và nhược điểm
So sánh ở mức khái niệm
Ở mức khái niệm, Lớp và cấu trúc hoàn toàn khác nhau:
♦ Lớp là khái niệm chỉ có trong lập trình hướng đối tượng; nó được dùng để biểu diễn một tập các đối tượng tương tự nhau.
♦ Trong khi đó, Cấu trúc là khái niệm chỉ tồn tại trong lập trình cấu trúc, không phải là một khái niệm của lập trình hướng đối tượng. Vì trong lập trình hướng đối tượng, tất cả các thực thể đều được coi là một đối tượng, nghĩa là nó phải là một thể hiện cụ thể của một lớp nào đó. Do đó, trong lập trình hướng đối tượng, không có khái niệm Cấu trúc.
So sánh về mục đích và chức năng
Về mục đích, Lớp và Cấu trúc đều có chung một mục đích ban đầu, đó là nhóm một tập hợp các dữ liệu lại với nhau để xử lí đồng bộ và thống nhất: Cấu trúc nhóm các dữ liệu hay phải đi kèm với nhau lại thành một nhóm cho dễ xử lí. Tương tự, Lớp là tập hợp một số thuộc tính chung của đối tượng để xử lí.
Tuy nhiên, Lớp và Cấu trúc cũng có một số khác biệt trên khía cạnh này:
♦ Lớp ngoài mục đích nhóm các thuộc tính dữ liệu của đối tượng, còn nhóm các hoạt động của đối tượng thành các phương thức của Lớp.
♦ Trong khi đó, mặc dù cũng có thể cung cấp các hàm trong Cấu trúc, nhưng mục đích chính của Cấu trúc chỉ là nhóm dữ liệu thành cấu trúc cho dễ xử lí.
So sánh về ưu nhược điểm
Vì có cùng mục đích là nhóm các dữ liệu lại với nhau để xử lí, cho nên Lớp cà Cấu trúc có cùng ưu điểm là làm chương trình gọn gàng, xử lí đồng bộ và thống nhất.
Tuy nhiên, Lớp còn có một số ưu điểm mà Cấu trúc không có:
♦ Lớp có khả năng bảo vệ dữ liệu tránh bị truy nhập tự do từ bên ngoài. Các chương trình bên ngoài chỉ có thể truy nhập vào dữ liệu của đối tượng thông qua các phương thức do Lớp cung cấp, không thể tự do truy nhập. Trong khi đó, Cấu trúc mặc dầu đã nhóm dữ liệu với nhau nhưng không có khả năng bảo vệ dữ liệu: Các chương trình bên ngoài vẫn có thể truy nhập tự do vào các thành phần của Cấu trúc.
♦ Lớp có khả năng đóng gói để hạn chế tối đa thay đổi khi phải sửa lại mã chương trình. Khi có sự thay đổi, chỉ cần thay đổi mã của một phương thức, các chương trình bên ngoài sử dụng phương thức đó đều không phải thay đổi. Trong khi đó, nếu thay đổi một thành phần của Cấu trúc, ta phải thay đổi mã của tất cả các chương trình sử dụng thành phần đó của Cấu trúc.
♦ Lớp có thể được kế thừa bởi một Lớp khác, điều này làm tăng khả năng sử dụng lại mã nguồn của chương trình. Trong khi đó, Cấu trúc hoàn toàn không có cơ chế kế thừa, cho nên nhiều khi phải viết lại những đoạn mã giống nhau nhiều lần. Điều này vừa tốn công sức, vừa không an toàn khi có sự thay đổi một trong những đoạn mã giống nhau đó.
3/- Thành phần Private và Public của lớp Để bảo vệ dữ liệu tránh bị truy nhập tự do từ bên ngoài, lập trình hướng đối tượng sử dụng các từ khoá quy định phạm vi truy nhập các thuộc tính và phương thức của lớp. Một cách tổng quát, lập trình hướng đối tượng chia ra hai mức truy nhập các thành phần lớp:
Private: Truy nhập trong nội bộ lớp.
Protected: Thành phần được bảo vệ, được hạn chế truy nhập như thành phần private (sẽ được trình bày sau).
Public: Truy nhập tự do từ bên ngoài.
Thành phần private
Thành phần private là khu vực dành riêng cho lớp, không chia sẻ với bất kì lớp khác từ bên ngoài. Thành phần private chỉ cho phép truy nhập trong phạm vi nội bộ lớp: Từ phương thức vào các thuộc tính hoặc giữa các phương thức của lớp với nhau. Các thành phần private không thể truy nhập từ bên ngoài lớp, cũng như từ đối tượng khác.
Trong một lớp, thông thường các thành phần sau sẽ được đặt vào khu vực private của lớp:
♦ Tất cả các thuộc tính dữ liệu của lớp. Các thuộc tính dữ liệu của lớp được đặt vào vùng private nhằm bảo vệ chúng, tránh sự truy nhập tự do từ bên ngoài.
♦ Các phương thức trung gian, được sử dụng như các bước tính toán đệm cho các phương thức khác. Các phương thức trung gian được đặt vào vùng private để thực hiện việc đóng gói trong lập trình hướng đối tượng: Các đối tượng, chương trình bên ngoài không cần, và không thể biết cách tính toán cụ thể bên trong của lớp.
Thành phần public
Thành phần public là khu vực mà Lớp có thể chia sẻ với tất cả các chương trình và đối tượng bên ngoài. Thành phần public có thể được truy nhập từ bên trong lẫn bên ngoài lớp:
Bên trong lớp: từ phương thức lớp vào các thuộc tính dữ liệu của lớp, hoặc giữa các phương thức của lớp với nhau.
Bên ngoài lớp: Từ chương trình bên ngoài hoặc các đối tượng khác vào các phương thức của lớp.
Trong một lớp, thông thường các thành phần sau sẽ được đặt vào vùng chia sẻ public của lớp:
♦ Các phương thức để nhập/xem (set/get) các thuộc tính dữ liệu của lớp. Các phương thức này sẽ cho phép các đối tượng bên ngoài truy nhập vào các thuộc tính dữ liệu của lớp một cách gián tiếp.
♦ Các phương thức cung cấp chức năng hoạt động, cách cư xử của đối tượng đối với môi trường bên ngoài. Các phương thức này thể hiện chức năng của các đối tượng lớp.
4/- Một số ngôn ngữ lập trình hướng đối tượng Nội dung phần này sẽ trình bày một số ngôn ngữ lập trình hướng đối tượng thông dụng hiện nay:
♦ Ngôn ngữ lập trình C++
♦ Ngôn ngữ lập trình ASP.NET và C#.NET
♦ Ngôn ngữ lập trình Java
4.1/- C++
C++, ra đời vào giữa những năm 1980, là một ngôn ngữ lập trình hướng đối tượng được mở rộng từ ngôn ngữ lập trình cấu trúc C. Cho nên, C++ là ngôn ngữ lập trình nửa hướng đối tượng, nửa hướng cấu trúc.
Những đặc trưng hướng đối tượng của C++
♦ Cho phép định nghĩa lớp đối tượng.
♦ Cho phép đóng gói dữ liệu vào các lớp đối tượng. Cho phép định nghĩa phạm vi truy nhập dữ liệu của lớp bằng các từ khoá phạm vi.
♦ Cho phép kế thừa lớp với các kiểu kế thừa khác nhau tuỳ vào từ khoá dẫn xuất.
♦ Cho phép lớp kế thừa sử dụng các phương thức của lớp bị kế thừa (trong phạm vi quy định).
♦ Cho phép định nghĩa chồng phương thức trong lớp kế thừa.
Những vi phạm hướng đối tượng của C++
Những vi phạm này là do kết quả kế thừa từ ngôn ngữ C, một ngôn ngữ lập trình thuần cấu trúc.
♦ Cho phép định nghĩa và sử dụng các biến dữ liệu tự do.
♦ Cho phép định nghĩa và sử dụng các hàm tự do.
♦ Ngay cả khi dữ liệu được đóng gói vào lớp, dữ liệu vẫn có thể truy nhập trực tiếp như dữ liệu tự do bởi các hàm bạn, lớp bạn (friend) trong C++.
4.2/- ASP.NET và C++.NET
Các ngôn ngữ lập trình .NET (còn được gọi là .NET Frameworks) của MicroSoft ra đời vào cuối những năm 1990 để cạnh tranh với ngôn ngữ lập trình Java. .NET là một ngôn ngữ hoàn toàn hướng đối tượng, hơn nữa, nó còn cung cấp một giao diện lập trình đồ hoạ thân thiện và đẹp mắt với truyền thống lập trình kéo thả của MicroSoft.
Một số đặc điểm của ngôn ngữ .NET:
♦ Là một ngôn ngữ hoàn toàn hướng đối tượng: Tất cả các thành phần, các thực thể trong chương trình đều được mô hình dưới dạng một lớp nhất định. Không có dữ liệu tự do và hàm tự do trong chương trình.
♦ Cung cấp giao diện lập trình đồ hoạ: lập trình viên chỉ cần kéo và thả các đối tượng đồ hoạ cho ứng dụng của mình.
♦ Cho phép lập trình viên tự tạo ra các thư viện UserControl của mình. Đây là một thư viện bao gồm các thành phần được người dùng tự thiết kế giao diện, viết mã nguồn, đóng gói và có thể sử dụng lại trong nhiều ứng dụng khác nhau, tuỳ theo chức năng của các thành phần.
4.3/- Java
Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6 năm 1995. Java được xây dựng trên nền tảng của C và C++: Java sử dụng cú pháp của C và đặc trưng hướng đối tượng của C++.
Một số đặc điểm của Java:
♦ Java là một ngôn ngữ lập trình hoàn toàn hướng đối tượng: Tất cả các thực thể đều được coi là một đối tượng, là một thể hiện cụ thể của một lớp xác định. Không có dữ liệu tự do và hàm tự do trong Java, tất cả đều được đóng gói vào các lớp xác định.
♦ Java là ngôn ngữ vừa biên dịch vừa thông dịch. Đầu tiên mã nguồn được biên dịch thành dạng bytecode; sau đó được thực thi trên từng loại máy nhờ trình thông dịch. Điều này tạo ra khả năng hoạt động độc lập với nền tảng phần cứng của các ứng dụng Java.
♦ Java cho phép người dùng tự tạo các đối tượng thư viện JavaBeans của mình (tương tự như các thành phần UserControl của .NET). Các đối tượng Bean sẽ được sử dụng lại như các thành phần có sẵn trong các ứng dụng khác. Điều này mở ra khả năng to lớn để tiết kiệm công sức viết mã nguồn và khả năng xây dựng các kỹ thuật cho một nền công nghiệp lắp ráp phần mềm.
Ngôn ngữ lập trình hướng đối tượng Java sẽ được trình bày chi tiết trong toàn bộ phần 2 của giáo trình này.
Hết 
nguồn :http://www.thuvien-it.net

Những khái niệm cơ bản của lập trình hướng đối tượng – Phần 2

Những khái niệm cơ bản của lập trình hướng đối tượng – Phần 2

Trừu tượng hoá đối tượng theo dữ liệu chính là quá trình mô hình hoá các thuộc tính của lớp dựa trên các thuộc tính của các đối tượng tương ứng. Quá trình này được tiến hành như sau:
1.4/- Trừu tượng hóa đối tượng theo dữ liệu
♦ Tập hợp tất cả các thuộc tính có thể có của các đối tượng.
♦ Nhóm các đối tượng có các thuộc tính tương tự nhau, loại bỏ bớt các thuộc tính cá biệt, tạo thành một nhóm chung.
♦ Mỗi nhóm đối tượng đề xuất một lớp tương ứng.
♦ Các thuộc tính chung của nhóm đối tượng sẽ cấu thành các thuộc tính tương ứng của lớp được đề xuất.
Ví dụ, trong bài toán quản lí cửa hàng bán ô tô. Mỗi ô tô có mặt trong của hàng là một đối tượng. Mặc dù mỗi chiếc xe có một số đặc điểm khác nhau về nhãn hiệu, giá xe, màu sắc… nhưng có chung các thuộc tính của một chiếc xe ô tô là:
♦ Các xe đều có nhãn hiệu.
♦ Các xe đều có màu sắc.
♦ Các xe đều có giá bán.
♦ Các xe đều có công suất động cơ.
Ngoài ra, một số ít xe có thể có thêm các thuộc tính:
♦ Có xe có thể có dàn nghe nhạc.
♦ Có xe có thể có màn hình xem ti vi.
♦ Có xe có lắp kính chống nắng, chống đạn…
Tuy nhiên, đây là các thuộc tính cá biệt của một số đối tượng xe, nên không được đề xuất thành thuộc tính của lớp ô tô. Do đó, ta mô hình lớp ô tô với các thuộc tính chung nhất của các ô tô.

Ưu điểm của việc trừu tượng hóa
Những ưu điểm của việc trừu tượng hóa là:
♦ Tập trung vào vấn đề cần quan tâm.
♦ Xác định những đặc tính thiết yếu và những hành động cần thiết.
♦ Giảm thiểu những chi tiết không cần thiết.
Việc trừu tượng hóa dữ liệu là cần thiết, bởi vì không thể mô tả tất cả các hành động và các thuộc tính của một thực thể. Vấn đề mấu chốt là tập trung đến những hành vi cốt yếu và áp dụng chúng trong ứng dụng.
1.5/- Khái niệm kế thừa
Xét trường hợp bài toán quản lí nhân sự và sinh viên của một trường đại học. Khi đó, ta có hai lớp đối tượng chính là lớp Nhân viên và lớp Sinh viên:

Ta nhận thấy rằng hai lớp này có một số thuộc tính và phương thức chung: tên, ngày sinh, giới tính. Tuy nhiên, không thể loại bỏ các thuộc tính cá biệt để gộp chúng thành một lớp duy nhất, vì các thuộc tính lương nhân viên và lớp của sinh viên là cần thiết cho việc quản lí. Vấn đề nảy sinh như sau:
♦ Ta phải viết mã trùng nhau đến hai lần cho các phương thức: nhập/xem tên, nhập/xem ngày sinh, nhập/xem giới tính. Rõ rang điều này rất tốn công sức.
♦ Nếu khi có sự thay đổi về kiểu dữ liệu, chẳng hạn kiểu ngày sinh được quản lí trong hệ thống, ta phải sửa lại chương trình hai lần.
Để tránh rắc rối do các vấn đề nảy sinh như vậy, lập trình hướng đối tượng sử dụng kỹ thuật kế thừa nhằm nhóm các phần giống nhau của các lớp thành một lớp mới, sau đó cho các lớp ban đầu kế thừa lại lớp được tạo ra. Như vậy, mỗi lớp thừa kế (lớp dẫn xuất, lớp con) đều có các thuộc tính và phương thức của lớp bị thừa kế (lớp cơ sở, lớp cha).
Quay lại với bài toán quản lí trường đại học, các thuộc tính và phương thức chung giứa lớp Nhân viên và lớp Sinh viên là:
♦ Tên,
♦ Ngày sinh,
♦ Giới tính,
♦ Nhập/xem tên,
♦ Nhập/xem ngày sinh
♦ Nhập/xem giới tính.
Ta tách phần chung này thành một lớp ở mức trừu tượng cao hơn, lớp Người. Lớp Người sẽ làm lớp cha của lớp Nhân viên và lớp Sinh viên. Khi đó, các lớp trở thành:

Như vậy, sự kế thừa trong lập trình hướng đối tượng:
♦ Cho phép lớp dẫn xuất có thể sử dụng các thuộc tính và phương thức của lớp cơ sở tương tự như sử dụng các thuộc tính và phương thức của mình.
♦Cho phép việc chỉ cần cài đặt phương thức ở một lớp cơ sở, mà có thể sử dụng được ở tất cả các lớp dẫn xuất.
♦ Cho phép tránh sự cài đặt trùng lặp mã nguồn của chương trình.
♦ Cho phép chỉ phải thay đổi một lần khi cần phải thay đổi dữ liệu của các lớp.
1.5/- Khái niệnm đóg gói
Xét ví dụ bài toán quản lí nhân viên văn phòng với lớp Nhân viên như sau:

Khi đó, cách tính lương cho nhân viên là khác nhau đối với mỗi người:
= * *
Trong đó, tỉ lệ phần trăm là khác nhau cho mỗi phòng ban, ví dụ:
♦ Phòng kế hoạch là 105%
♦ Phòng hành chính là 100%
♦ Phòng nhân sự là 110%
Khi đó, tuỳ vào thuộc tính phòng ban khác nhau mà ta phải dùng công thức tỉ lệ khác nhau để tính lương cho mỗi nhân viên.
Tuy nhiên, cách tính cụ thể này là công việc bên trong của phương thức tính tiền lương của lớp Nhân viên. Với mỗi ứng dụng, khi tạo một đối tượng cụ thể của lớp nhân viên, ta chỉ cần truyền các tham số thuộc tính cho đối tượng, sau đó gọi phương thức tính tiền lương cho đối tượng nhân viên đó, ta sẽ biết được tiền lương của nhân viên. Cách gọi phương thức tính tiền lương là hoàn toàn giống nhau cho tất cả các đối tượng nhân viên của văn phòng.
Sự giống nhau về cách sử dụng phương thức cho các đối tượng của cùng một lớp, mặc dù bên trong phương thức có các cách tính toán khác nhau với các đối tương khác nhau, được gọi là tính đóng gói dữ liệu của lập trình hướng đối tượng. Như vậy, tính đóng gói dữ liệu của lập trình hướng đối tượng:
♦ Cho phép che dấu sự cài đặt chi tiết bên trong của phương thức. Khi sử dụng chỉ cần gọi các phương thức theo một cách thống nhất, mặc dù các phương thức có thể được cài đặt khác nhau cho các trường hợp khác nhau.
♦ Cho phép che dấu dữ liệu bên trong của đối tượng. Khi sử dụng, ta không biết được thực sự bên trong đối tượng có những gì, ta chỉ thấy được những gì đối tượng cho phép truy nhập vào.
♦ Cho phép hạn chế tối đa việc sửa lại mã chương trình. Khi phải thay đổi công thức tính toán của một phương thức, ta chỉ cần thay đổi mã bên trong của phương thức, mà không phải thay đổi các chương trình gọi đến phương thức bị thay đổi.
1.7/- Khái niệm đa hình
Trở lại với ví dụ về quản lí trường đại học, với hai lớp Nhân viên và lớp Sinh viên, đều kế thừa từ lớp Người. Khi đó, ta thêm vào mỗi lớp một phương thức show():
♦ Phương thức show của lớp Người sẽ giới thiệu tên và tuổi của người đó.
♦ Phương thức show của lớp Nhân viên sẽ giới thiệu nhân viên đó có tiền lương là bao nhiêu.
♦ Phương thức show của lớp Sinh viên sẽ giới thiệu là sinh viên đó đang học ở lớp nào.

Khi đó, nếu trong hệ thống có các đối tượng cụ thể tương ứng với ba lớp, thì:
♦ Khi ta gọi hàm show từ đối tượng của lớp Người, sẽ nhận được tên và tuổi của người đó.
♦ Khi ta gọi phương thức show từ đối tượng của lớp Nhân viên, sẽ nhận được số tiền lương của nhân viên đó.
♦ Khi ta gọi phương thức show từ đối tượng của lớp Sinh viên, ta sẽ biết được lớp học của sinh viên đó.
Việc chỉ cần gọi cùng một phương thức, nhưng từ các đối tượng khác nhau, sẽ cho kế quả khác nhau được gọi là tính đa hình trong lập trình hướng đối tượng. Như vậy, tính đa hình trong lập trình hướng đối tượng:
♦ Cho phép các lớp được định nghĩa các phương thức trùng nhau: cùng tên, cùng số lượng và kiểu tham số, cùng kiểu trả về. Việc định nghĩa phương thức trùng nhau của các lớp kế thừa nhau còn được gọi là sự nạp chồng phương thức.
♦ Khi gọi các phương thức trùng tên, dựa vào đối tượng đang gọi mà chương trình sẽ thực hiện phương thức của lớp tương ứng, và do đó, sẽ cho các kết quả khác nhau.
Hết phần 2
Nguồn : 
 http://www.thuvien-it.net

Lập trình hướng đối tượng - Phần 1

Lập trình hướng đối tượng - Phần 1

Lớp kế thừa
Tư tưởng chính của lập trình hướng đối tượng là xây dựng một chương trình dựa trên sự phối hợp hoạt động của các đối tượng. Một đối tượng bao gồm hai thành phần chính là thông tin lưu trữ và các thao tác xử lý.
Trong thế giới thực, đối tượng là thực thể tồn tại như con người, xe, máy tính, … Trong ngôn ngữ lập trình, đối tượng có thể là màn hình, điều khiển, …
Lập trình hướng đối tượng là kỹ thuật lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng có những thuộc tính (thông tin lưu trữ), những phương thức xác định các chức năng của đối tượng. Bên cạnh đó, đối tượng cũng có khả năng phát sinh các sự kiện khi thay đổi thông tin, thực hiện một chức năng hay khi đối tượng khác tác động vào. Tất cả những thuộc tính, phương thức và sự kiện tạo nên cấu trúc của đối tượng. Có 4 ý niệm trong lập trình hướng đối tượng :
- Abstraction : tính trừu tượng.
- Encapsulation : tính đóng gói.
- Inheritance : tính kế thừa.
- Polymorphism : tính đa hình.
Mỗi ý niệm đều có vai trò quan trọng trong lập trình hình đối tượng.

1/- Tính trừu tượng

Bạn thường lẫn lộn giữa lớp (Class) và đối tượng (Object). Cần phân biệt lớp là một ý niệm trừu tượng, còn đối tượng là một thể hiện cụ thể của lớp.
Ví dụ : bản thiết kế nhà là lớp, ngôi nhà được xây dựng dựa trên bản thiết kế là đối tượng.
Từ những đối tượng giống nhau, bạn có thể trừu tượng hóa thành một lớp.
Tính trừu tượng cho phép bạn loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.

2/- Tính đóng gói

Mỗi lớp được xây dựng để thực hiện một nhóm chức năng đặc trưng riêng của lớp, trong trường hợp một đối tượng thuộc lớp cần thực hiện một chức năng không nằm trong khả năng vì chức năng đó thuộc về một đối tượng thuộc lớp khác, thì nó sẽ yêu cầu đối tượng đó đảm nhận thực hiện công việc. Một điểm quan trọng trong cách gia tiếp giữa các đối tượng là một đối tượng sẽ không được truy xuất trực tiếp vào thành phần dữ liệu của đối tượng khác cũng như không đưa thành phần dữ liệu của mình cho đối tượng khác một cách trực tiếp. Tất cả mọi thao tác truy xuất vào thành phần dữ liệu từ đối tượng này qua đối tượng khác phải được thực hiện bởi các phương thức (method) của chính đối tượng chứa dữ liệu. Đây cũng chính là một tính chất quan trọng trong lập trình hướng đối tượng gọi là tính đóng gói (encapsulation<) dữ liệu.
Tính đóng gói cho phép dấu thông tin của đối tượng bằng cách kết hợp thông tin và các phương thức liên quan đến thông tin trong đối tượng.
Ví dụ :
Xe hơi có các chức năng (phương thức phô diễn bên ngoài) như Ngừng, Chạy tới, Chạy lùi. Đây là những gì cần thiết cho Tài xế tương tác với Xe hơi. Xe hơi có thể có một đối tượng Động cơ nhưng Tài xế không cần phải quan tâm. Tất cả những gì cần quan tâm là những chức năng để có thể vận hành xe. Do đó, khi thay một Động cơ khác, Tài xế vẫn sử dụng các chức năng cũ để vận hành Xe hơi bao lâu các chức năng (phương thức) đưa ra bên ngoài (Interface) không bị thay đổi.

3/- Tính kế thừa

Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã có. Lớp đã có gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, có thể mở rộng công năng các thành phần kế thừa cũng như bổ sung thêm các thành phần mới.
Bạn phân biệt hai loại quan hệ :
Là – một
Biểu thị tính kế thừa. Trong quan hệ "là – một", một đối tượng của lớp Con được xem như là một đối tượng của lớp Cha.

Lớp kế thừa
Ví dụ :
Từ lớp Xe bạn tạo nên lớp Xe hơi mở rộng, lớp này mặc nhiên kế thừa tất cả các thành phần của lớp xe. Bạn có thể nói một xe hơi là một chiếc xe.
Có – một
Quan hệ này mang ý nghĩa gồm có. Trong quan hệ "có – một", một đối tượng có thể có một hoặc nhiều thành phần tham chiếu đến các đối tượng khác.
Ví dụ :
Trong mô hình xe hơi, bạn muốn diễn tả ý tưởng chiếc xe "có – một" tay lái. Bạn không thể phát sinh lớp Xe hơi từ một Tay lái hay ngược lại (một Xe hơi là một Tay lái). Thay vì vậy, bạn phải có hai lớp độc lập làm việc với nhau trong đó, lớp phía ngoài (lớp Xe hơi) sẽ tạo và đưa ra công năng của lớp phía trong (lớp Tay lái).

4/- Tính đa hình

Tính đa hình là khả năng một ngôn ngữ xử lý các đối tượng hữu quan theo cùng một cách.
Tính đa hình thể hiện dưới nhiều hình thức :
Kết nối trễ - Late Binding
Là khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định đối tượng có phương thức muốn gọi hay không. Đến khi thực hiện, chương trình mới xác định được đối tượng và gọi phương thức tương ứng của đối tượng đó. Kết nối trễ giúp chương trình được uyển chuyển hơn, chỉ yêu cầu đối tượng cung cấp đúng phương thức cần thiết là đủ.
Ví dụ :
Bạn có lớp Xe với phương thức Chạy và các lớp Xe đạp, Xe hơi, Xe đẩy cùng phát sinh từ lớp Xe. Bạn chưa biết sẽ sử dụng xe gì đề di chuyển vù tùy thuộc tình hình có sẵn xe nào nên gọi trước phương thức Chạy. Khi chương trình thực thi, tùy theo đối tượng của lớp nào được đưa ra mà phương thức Chạy của đối tượng đó được gọi.
Nạp chồng – Overloading Đây là khả năng cho phép một lớp có nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, phương thức tương ứng sẽ được thực hiện.
Ghi chồng – Overriding
Hình thức này áp dụng cho lớp Con đối với lớp Cha. Lớp Con được phép có một phương thức cùng tên, cùng số tham số có kiểu dữ liệu như phương thức của lớp Cha hoặc những lớp trước đó nữa (lớp phát sinh ra lớp Cha …) với cài đặt khác đi. Lúc thực thi, nếu lớp Con không có phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu có, phương thức của lớp Con được gọi.
Còn tiếp
nguồn : http://www.thuvien-it.net.

Thứ Năm, 2 tháng 8, 2012

Lịch sử các đế chế trong AOE

 


SHANG

Shang hay theo cách gọi của người Việt ta là triều đại nhà Thương , triều đại này tồn tại từ năm 1600 BC đến 1027 BC (thời kỳ này Việt Nam ta chỉ là tập hợp các bộ lạc ). Nó là triều đại nối tiếp của nhà Hạ và tồn tại từ đời vua Thang đến đời vua Trụ (ông vua này nổi tiếng trong cái tác phẩm Phong Thần ) . Trong thời kỳ của mình nhà Thương đã thống nhất khu vực đồng bằng phía bắc Trung Quốc và cũng như các quốc gia khác trong cùng thời kỳ của mình , họ cũng bắt nô lệ và bắt các vùng đất bị họ đánh bại phải thần phục và phải hàng năm cống nộp .

Về mặt bonus trong đế chế thì do dân Trung Quốc quá đông nên các nhà sản xuất cho dân rẻ rề . Lãnh địa của họ có cả sa mạc và đồng bằng nên có lạc đà , ngựa chém và charrios , tường thành gấp đôi máu là do họ có quả Vạn lý trường thành quá ngon ( mặc dù thời này vẫn chưa xây ) . Họ không có voi vì Trung Quốc ko có voi và căn bản là thời này Vn ta chưa bị Trung Quốc chiếm .


MINOAN


Minoan là 1 vương quốc trên đảo Crete thuộc Địa Trung Hải , đế chế này tồn tại từ năm 2700 BC đến 1405 BC thì nền văn minh của họ bị thay thế bởi nền văn minh Mycenaean - một thành bang của Hy lạp . Do là 1 đảo quốc nên họ sinh sống bằng nghề chài lưới là chính , do vậy nên họ có 1 lực lượng thuỷ quân rất mạnh và lực lượng này cũng thường xuyên dc thuê để đánh bọn cướp biển hoành hành dữ dội trên Địa Trung Hải . Do họ ở 1 vị trí quan trọng trên con đường buôn bán trên biển nên việc bảo vệ chính mình trước các quốc gia khác là điều thực tế và các cung thủ của Minoan đã làm rất tốt việc này .

Trong AOE , trước thành tích quá tốt của cung thủ Minoan nên cung A dc cộng 2 ranger và thuỷ quân Minoan là 1 trong những lực lượng thuỷ quân hùng mạnh nhất .



PALMYRAN


Là 1 đất nước nằm ở 1 ốc đảo tồn tại giữa đế chế Roman ở phía tây và nước Parthian ở phía đông . Đất nước này nằm trên con đường buôn bán Đông -Tây nên đã thiết lập các đội bảo vệ trên sa mạc để bảo vệ con đường buôn bán giữa Damascus và sông Euphrates . Họ đã trở nên giàu có nhờ công việc này .Khoảng năm 17 BC , Palmyran trở thành 1 phần của đế chế Roman khi được phép giữ lại nền độc lập và đội quân sa mạc của mình . Đến năm 179 thì PAlmyran trở thành 1 thành phố trong tình trạng tự do ( nghĩa là ko đánh thuế ) và là 1 thuộc địa của Roman.

NĂm 260, quân Palmyran đã đánh bại đế chế Persia và bắt sống được vua Valerian của Roman ,họ lập 1 quý tộc người Palmyran là Dux Orientis lên thay thế và rất được người Roman ủng hộ . SAu đó họ chiếm giữ Ai cập và đẩy người Goths ra khỏi Asia Minor(cái này em chịu , chả dịch dc ) . Lúc này lãnh thổ Palmyran trải dài từ Asia Minor đến Ai Cập . Tuy nhiên người Roman cũng không thể quên được cuộc nổi dậy của người Palmyran và sự mất đi viện trợ lương thực từ Ai Cập , 1 đạo quân đã bị tiêu diệt ở AI Cập , tuy nhiên Aurelius đã tiêu diệt quân Palmyran 2 lần ở Antioch và Emesa . Quân Palmyran đã bị bao vây và đầu hàng . Người Palmyran nổi dậy 1 lần nữa và tàn sát các đơn vị đồn trú của người Roman . Các đội Legion của Roman quay trở lại 1 cách nhanh chóng và cướp phá thành phố .
Với 1 đạo quân sa mạc hùng mạnh nên lạc đà Palmyran chạy nhanh 25% . Là 1 quốc gia giàu có ở giữa sa mạc , bị biến thành 1 thành phố tự do nên dân Palmyran có khả năng làm rất nhanh và chuyển tiền không tính thuế .



ASSYRIA


Assyria là vùng đất có lịch sử xa xưa ở phía thượng nguồn sông Tigris, tên gọi lúc đầu của thủ đô chính là thành phố cổ Assur. Về sau, giống như vương quốc, đế chế tiến lên khai phá một phần phía Bắc Lưỡng Hà (một phần phía Nam Babylonia. Thủ đô là Nineveh.


Thực chất Assyria là một vùng nhiều đồi núi, trải dài theo sông Tigris cho đến tận cao nguyên Gordiaean hoặc ngọn núi Carduchian của Armenia, có một thời được gọi là "Vùng núi của Ashur".


Các vị vua của Assyria cai trị một vương quốc rộng lớn trong ba giai đoạn lịch sử, được gọi theo cổ xưa, giữa và vương quốc Assyria mới (Neo-Assyrian). Nhưng phát triển rực rỡ nhất của Assyria chính là thời kỳ Tân Assyria, niên đại: 911 - 12 TCN.


Do người Assyria là dân tộc đầu tiên sử dụng bánh xe nên dân Assyria có khả năng chạy nhanh 30%.



PHOENICIA


Phoenicia là một nền văn minh ở phía Bắc của Canaan cổ xưa, với trung tâm kéo dài suốt bờ biển của Liban và Syria ngày nay. Văn minh Phoenicia có một nền kinh tế buôn bán hàng hải dọc bờ biển Địa Trung Hải phát triển sớm từ thiên niên kỷ thứ 3 trước Công Nguyên. Người Phoenicia có một nền nông nghiệp sớm như đánh bắt cá, chăn nuôi, các loại cây trồng: ôliu, nho và lúa mì. Người Phoenicia rất gan dạ và can đảm, họ giỏi trong nghề hàng hải và buôn bán.


Dải đất Phoenicia nằm giữa các nền văn minh: Lưỡng Hà, Ai Cập, Hy Lạp nên có rất nhiều điều kiện thông thương và phát triển. Họ làm chủ con đường buôn bán từ Đông sang Tây từ đầu thiên niên kỷ thứ 1 trước Công Nguyên cho đến thế kỷ thứ 6 TCN.


Người Phoenicia là những nhà hàng hải giỏi nên thuỷ quân của họ rất mạnh với Cat Trireme và Juggernaught bắn nhanh 65% . Người Phoenicia chặt gỗ nhanh do càn gỗ để duy trì lực lượng thuyền của mình . Họ cũng là những nhà buôn voi nên voi của họ rẻ 25%




BABYLON


Cuối thiên niên kỷ thứ III trước Công Nguyên, lợi dụng sự suy sụp của Lưỡng Hà, hai tộc người Elam và người Amorites xâm lược tàn phá và cướp bóc. Người Amorites xây dựng hai quốc gia về phía Nam của Lưỡng Hà là Ixine và Laxa; ở phía Bắc của Lưỡng Hà cũng hình thành các quốc gia Esnunna và Marie. Đến lượt các quốc gia trên tranh dành và gây chiến với nhau liên miên, gây nên cảnh đổ nát hoang tàn.


Vào khoảng đầu thế kỷ XIX trước Công Nguyên, người Amorites thống nhất Bắc Lưỡng Hà và hình thành quốc gia cổ Babylon (khác với Tân Babylon sau này) và họ đã thống nhất được khu vực Lưỡng Hà. Quốc gia Babylon cổ nằm trên đường giao lưu quan trọng nối châu Á rộng lớn sang Địa Trung Hải, châu Phi và châu Âu.


Sự cường thịnh và hùng mạnh đạt đến cao điểm vào thời kỳ 1792-1750 trước Công Nguyên, dưới triều đại vua Hammourabi. Nhà nước cổ Babylon thống nhất trên một diện tích lãnh thổ toàn bộ Lưỡng Hà và bị suy sụp vào khoảng cuối thiên niên kỷ thứ II trước Công Nguyên bởi người Catsites nổi dậy và làm chủ hầu hết lãnh thổ của Babylon.


Đến năm 627 BC người Babylon đã gây dựng lại dc đất nước của mình và phục hồi lại vương quốc của mình vào năm 612 BC .

Thời kỳ Tân Babylonia có những thành tựu nổi bật cùng với thành tích của Nabopolassar, ông đã tích cực tái thiết lại Babylon do bị tàn phá bởi các thời kỳ dưới sự cai trị trước đó của người Assyria. Mục đích của Nabopolassar là xây dựng thủ đô của đế chế mới trở nên lộng lẫy hơn và tham vọng để trở thành kỳ quan trên thế giới. Các đền đài cũ được xây dựng lại, các cung điện với vẻ tráng lệ, nguy nga kinh ngạc đượng xây dựng lên dưới thời ông cùng với rất nhiều đền thờ các vị thần của Babylon được dựng lên (theo sử Hy Lạp viết bởi Diodorus của Sicilia và Herodotus). Cung điện của Nabopolassar được xây dựng bởi các chất liệu cực kỳ quý hiếm và rộng lớn. Bên cạnh thành phố có những công trình lộng lẫy như Vườn treo Babylon. Tháp Babel huyền thoại với đường kính chân tháp đến 91 mét.Năm 539 TCN Tân Babylonia bị Đế quốc Ba Tư xâm lược và nền văn minh Babylonia sụp đổ.




EGYPT


Ai Cập là đế chế xuất hiện đầu tiên và có 1 thời kỳ tồn tại dài nhất , kéo dài từ năm 5000 đến năm 30 trước công nguyên khi bị người La MÃ đánh bại và thống trị . Nói đến AI Cập là nói đến các Kim Tự Tháp với các xác ướp nổi tiếng . Trong suốt thời kỳ của phát triển của mình Ai Cập cổ đã rời đô nhiều lần ở Hierakonpolis, Memphis, Herakleopolis, Thebes, It-towy, Akhetaten, Tanis, Sais và Alexandria.Trong đó 2 nơi quan trọng nhất là Memphis và Thebes.Alexandria được xây dựng như là thủ đô của ALexander đại đế vào năm 331 trước công nguyên và triều đại Ptolemaic đã thống trị ở đây cho đến năm 30 trước công nguyên.

Về mặt quân đội , Ai Cập đã xây dựng được một đạo quân chuyên nghiệp , quân đội Ai Cập sử dụng giáo , cung và chuỳ để chiến đấu. Với việc phát minh ra CHarios , quân Ai Cập đã có 1 sức mạnh vượt trội so với các quốc gia khác . CHarios có thể mang 1 người lái và 1 cung thủ , đây được coi như là lực lượng chủ lực của AI Cập cổ .

Trong AOE , với việc phát minh ra Charios các nhà sản xuất đã cho AI Cập 1 lực lượng Charios mạnh nhất với 133% máu . DO AI Cập sở hữu 1 số lượng lớn các mỏ vàng và việc tìm thấy rất nhiều vàng trong các kim tự tháp nên AI Cập có khả năng kiếm vàng nhanh 30%





CHOSON


CHoson là 1 quốc gia thành lập từ liên minh các bộ lạc trên bán đảo Triều Tiên . Nền văn minh này tồn tại từ năm 450 đến 108 trước công nguyên khi bị nhà Hán bên Trung Quốc đánh bại .Nhà nước Choson được xác định tại thung lũng giữa Liao ( cái này em cũng không rõ lắm , hình như là nước Liêu ) và sông Taedong , vùng đất này ở phía tây nam thuộc 1 phần của Bắc Triều Tiên hiện nay. Thủ đô là Wanggom-song , nơi mà hiện nay là Bình Nhưỡng -thủ đô của Bắc Triều Tiên.

Về quân đội , CHoson loại ra chỗ đứng của quân đội và không tách rời khỏi nông dân .CHỉ những chiến binh giàu có mới có thể trang bị cho mình ngựa do vậy kỵ binh không phát triển . Kiếm sắt đã được người CHoson trang bị cho quân đội trong thời kỳ này .

Triều Tiên được coi như là 1 đân tộc mũ trắng , ngoại trừ tụi Thanh Long , Bạch Mã , Mãnh Hổ thời chiến tranh Việt Nam thì Triều Tiên chưa từng đem quân ra nước ngoài 1 lần nào (vì bên cạnh nó là 2 thằng khoẻ là TQ và Nhật) . Với các đạo bộ binh trang bị kiếm sắt ,các nhà SX đã cho Legion của Choson 240 máu .





PERSIA


Hay là Ba Tư trong tiếng Việt ,theo sử cũ ghi chép thì Ba Tư bắt đầu từ khoảng năm 3200 TCN ở nền văn minh Tiền-Elamite và tiếp tục với sự xuất hiện của người Aryan và sự thành lập Triều đại Medes, tiếp đó là Đế chế Achaemenid năm 546 TCN, đến năm 331 TCN thì bị Alexander đại đế chinh phục. Về mặt quân đội , những người dân Ba Tư dưới 50 tuổi đều bị ép vào quân đội cho nên Ba Tư có 1 lực lượng quân đội đông đảo trong đó tinh nhuệ nhất là đội cận vệ hoàng gia với 10000 người .


Voi được Persia sử dụng là 1 đơn vị hỗ trợ chiến trường cho kỵ binh - lực lượng chủ lựccủa Persia .Do vậy voi chiến được tuyển chọn thường là những chú voi nhỏ nhưng nhanh nhẹn . Thuỷ quân Persia là 1 lực lượng thuỷ quân chiến nhất thời cổ đại nên các nhà SX đã cho thuyền cung của Persia bắn nhanh




HITTITE

Hittite là một tộc người sử dụng ngôn ngữ Ấn - Âu cổ, đã thiết lập được vương quốc của mình và đặt thủ đô tại Hattusa - phía bắc Anatolia từ thế kỷ 18 TCN. Vào thế kỷ 14 TCN, đế chế Hittite đạt tới đỉnh cao của mình, chiếm cả Anatolia, bắc Syria, phía trên của Mesopotamia. Sau năm 1180 TCN, đế chế này phân tán thành vài thành phố (bang) độc lập là các "Neo-Hittite" (Người Hittite mới), một số trong đó tồn tại cho đến thế kỷ thứ 8 TCN.


Thuật ngữ "Hittite" được dịch theo kinh thánh của người Do Thái. Nhiều khả năng người Hittite có nguồn gốc từ người Hattian (Vương quốc Hattic) - một giống người đã sớm có mặt tại cùng lãnh địa của người Hittite sau này - từ tận thiên niên kỷ thứ 2 TCN nhưng không nói thứ tiếng Ấn - Âu (Indo - European). Lãnh thổ của Hittite hiện thuộc đất nước Thổ Nhĩ Kỳ, hiện còn rất nhiều những thành phố của nước Thổ có tên xuất phát từ những cái tên cổ của người Hittite, như là Sinop hay Adana. Điều đó đã cho thấy ảnh hưởng của văn hóa Hittite cổ xưa tới Anatolia như thế nào.


Người Hittite còn rất nổi tiếng với kỹ năng xây nhà và sử dụng Chariot. Hittite chính là những người tiên phong trong việc sử dụng đồ sắt (Iron Age), những vũ khí bằng sắt đã được họ chế ra từ thế kỷ 14 TCN. Công nghệ của người Hittite đã vượt xa các

đế chế cùng thời khi đó.
--> Điều này lí giải tại sao trong AOE, cung Hittite +1 damage (nước đầu tiên sử dụng vũ khí bằng sắt) và pháo x2 hp (Đồ sắt vững chắc hơn)

CHỮ VIẾT:


Chữ viết của người Hittite là những ký tự hình nêm. Những nhà khảo cổ đã tìm thấy rất nhiều những bản khắc bằng kí tự hình nêm tại Hattushash, ngòai ra chúng được viết cả bằng ngôn ngữ Babylonian. Từ chữ viết và những tài liệu khảo cổ học tìm được, người chứng minh được rằng Hittite có quan hệ mua bán với nhiều chế chế khác trong đó có Assyrian và nhiều nước lân cận vùng trung đông khác.


LỊCH SỬ:


Lịch sử của người Hittite thường được chia làm 3 thời kỳ: Người Hittite cổ xưa (1750-1500 TCN) Người Hittite trung đại (1500-1430 TCN) và người Hittite mới (1430-1180 TCN)


Hoàng đế cổ xưa nhất còn được biết đến của người Hittite là Pithana là người gốc Kussara vào thế kỷ 18 TCN sau khi chinh phục được Nesa - nơi đây đã trở thành thủ đô của người Hittite trong khoảng một thế kỷ cho tới khi Labarna II chiếm được Hattusa và đặt thủ đô của mình tại đây.


Trong suốt thế kỷ 15 TCN, đế chế Hittite bị suy yếu một cách khó hiểu. Đến năm 1400 TCN, dưới thời của Suppiluliuma I và Mursili II, Hittite trở lại thành quyền lực lớn nhất tại Anatolia, một phần Syria và Canaan. Đến năm 1300 TCN, Hittite bắt đầu gây ảnh hưởng của mình tới Ai Cập (Egyptian) dẫn tới cuộc chiến tại Kadesh năm 1274 TCN. Những cuộc chiến triền miên khiến cho đế chế Hittite dần suy yếu và sụp đổ vào năm 1160 TCN.



CHÍNH PHỦ:


Hittitte được coi là một trong những nhà nước quân chủ lập hiến đầu tiên. Chính phủ bao gồm có Đức Vua, Hoàng Gia, và hệ thống kiểu như nghị viện hay quốc hội bây giờ gọi là các Panku để kiểm tra giám sát mọi hoạt động của Vua. Có thể nói chính phủ của Hittite đã đạt một bước tiến lớn đối với việc lập pháp, hành pháp cũng như công bằng xã hội. Họ tạo ra bộ luật dành cho Hatti trong đó chú ý là rất hiếm khi dùng tới tử hình như là một sự trừng phạt. Ví dụ như hình phạt đối với kẻ cắp chỉ là phải hoàn trả những gì lấy đi..., đó là một bước tiến quan trọng tới những luật lệ hiện đại sau này.


Carthage


Đế chế của người Carthage vào thế kỉ thứ 3 TCNCộng hoà Carthage là một trong những quốc gia lâu đời nhất và lớn nhất trong thế giới Địa Trung Hải cổ. Các bản văn tự còn lại là về các cuộc chiến tranh với Syracuse và người La Mã mà cuối cùng kết quả là sự thất bại và sự phá hủy Carthage trong chiến tranh Punic lần 3.


Lực lượng quân đội Carthage


Theo Polybius, Carthage dựa rất nhiều, mặc dù không độc quyền, vào lính đánh thuê nước ngoài[8] đặc biệt là trong chiến tranh ở nước ngoài. Cốt lõi của quân đội của nó là từ bắc phi(dân tộc Libya và người Numidia, cũng như "Liby-Phoenicia" - Punics ) .Các binh sĩ đã được hỗ trợ bởi lính đánh thuê từ các nhóm dân tộc khác nhau, trải dài trên khắp Địa Trung Hải, những người đã chiến đấu tại các đơn vị của chính quốc gia của họ; người Celt, Balearic, và Iberia đặc biệt chiếm ưu thế hơn cả. Sau cuộc chinh phục của nhà Barca ở bán đảo Iberia, lính Iberia thậm chí còn đông hơn người Carthage. Carthage có trên chiến trường một lực lượng kị binh rất ghê gớm, đặc biệt là ở châu Phi, quê hương của nó;Một lực lượng quan trọng trong đó là kị binh nhẹ của Numidia. Một loại quân khác được sử dụng là những con voi chiến bắc Phi đã tuyệt chủng. Chúng được đào tạo cho chiến tranh, và được sử dụng để phổ biến cho các cuộc tấn công mặt trước hoặc như chống lại sự tấn công của kị binh. Một đội quân có thể được trang bị tới hàng trăm con voi hoang dã như vậy, nhưng trong các văn bản cổ xưa thì chỉ có ít hơn một trăm được triển khai. Những người quản tượng được trang bị giáo và búa để giết voi nếu chúng quay ngược trở lại về phía quân đội của mình.


Hải quân

Roman trireme mosaic from Carthage, Bardo Museum, TunisHải quân của Carthage là một trong những hạm đội lớn nhất tại Địa Trung Hải, sử dụng một quy trình đóng hàng loạt để duy trì số lượng lớn với chi phí vừa phải.Các thủy thủ và thủy quân lục chiến của hải quân Carthage được tuyển dụng chủ yếu từ các công dân Punic, không giống như nhiều quốc gia đồng minh và quân lính đánh thuê của quân đội Carthage. Hải quân cung cấp một nghề nghiệp ổn định và đảm bảo tiền lương cho các thủy thủ của nó. [9] Điều này đã giúp góp phần ổn định chính trị của thành phố, làm giảm bớt tình trạng thất nghiệp.

Polybius đã viết trong cuốn sách thứ sáu của tác phẩm "Lịch sử" của mình rằng người Carthage "đã tham gia trong hải quân hiều hơn bất cứ dân tộc nào khác " .[10] Hạm đội của họ có từ 300-350 tàu . Người La Mã, những người có ít kinh nghiệm trong chiến tranh hải quân trước khi Chiến tranh Punic lần thứ nhất nổ ra, cuối cùng đã cố gắng để đánh bại người Carthage bằng cách sử dụng nhiều mánh khóe để chiếm giữ tàu của người Carthage. Tuyển dụng của các thủy thủ Hy Lạp có kinh nghiệm từ thành phần các thành phố bị họ chinh phục.


Macxedonia


Trước thế kỉ thứ 4 TCN, vương quốc bao phủ một vùng tương ứng với địa bàn tỉnh Macedonia của Hy Lạp hiện đại. Quốc gia Macedonia thống nhất cuối cùng cũng được thành lập bởi vua Amyntas III của Macedonia (c. 393-370 TCN), mặc dù vẫn còn giữ lại xung đột mạnh mẽ giữa những người chăn gia súc giàu có ven biển và những bộ lạc hung tợn ở nội địa. Một liên minh đã được thiết lập với nhà vua thông qua các cuộc hôn nhân. Họ kiểm soát việc vượt qua của những cuộc xâm lược của người man tộc đến từ Illyria ở phía bắc và tây bắc. Nó ngày càng trở nên Attic hóa trong thời gian này, mặc dù sự xuất hiện của người Athen là để lưu tâm đến người Macedonia thô lỗ.[10]Trước khi thành lập Liên minh Corinth, mặc dù Macedonia dường như nói một phương ngữ của ngôn ngữ Hy Lạp và tuyên bố tự hào rằng họ là người Hy Lạp, họ đã không được coi là hoàn toàn chia sẻ nền văn hóa Hy Lạp cổ điển bởi nhiều cư dân của những thành bang miền nam.


Chinh phục Hy lạp

Philip II, Vua của MacedonAmyntas đã có ba con trai, người đầu tiên và thứ 2, Alexander II và Perdiccas III chỉ cai trị trong một thời gian ngắn. Người thừa kế còn nhỏ của Perdiccas bị phế truất bởi con trai thứ 3 của Amyntas, Phillip II của Macedon, người tự mình lên ngôi vua và mở ra thời kì Macedonia cai trị Hy Lạp. Dưới thời Philip II, (359-336 TCN), Macedon mở rộng vào lãnh thổ của người Paionia, Thracia, và Illyria. Trong các cuộc chinh phục khác, ông sát nhập những vùng đất của Pelagonia và phía nam Paionia.

Philippos thiết kế lại quân đội Macedonia bằng cách thêm vào một dạng biến thể của lực lượng hoplite truyền thống để làm cho nó có hiệu quả hơn ( cái này chính là xiên thần Macxe ). Ông đã thêm vào quân đội mình lực lượng hetairoi, một loại kị binh trang bị giáp nặng và nhiều bộ binh nhẹ hơn, làm tăng thêm tính linh hoạt cao hơn. Ông cũng đã kéo dài thêm độ dài của giáo và thu nhỏ lại khiên của bộ binh, tăng khả năng tiện dụng của nó trong giao chiến. (chính vì thế mà macxe đc + 2 ranger)


Phillippos nhanh chóng bắt đầu mở rộng biên giới của vương quốc mình. Ông mở chiến dịch đầu tiên ở phía Bắc chống lại những người không phải là người Hy Lạp, người Illyrians, bảo vệ biên giới phía Bắc của mình và xây dựng được uy tín của một nhà thống lãnh quân sự. Tiếp theo ông quay trở lại phía đông, tới những lãnh thổ dọc theo bờ phía bắc của Aegea. Thành phố quan trọng nhất của khu vực này là Amphipolis, mà đã kiểm soát con đường tới Thrace và những mỏ bạc có giá trị gần đó. Vùng đất này là một phần của đế chế Athen và người Athen vẫn coi đó thuộc phạm vi ảnh hưởng của họ, nhưng đã bị giới hạn bởi sự bùng nổ của chiến tranh Đồng minh. Họ cũng chỉ làm được rất ít để ngăn cản Phillippos đưa quân đội của mình xuống phía nam và chiếm gần hết Thessaly.


Kiểm soát được Thessaly có nghĩa là bây giờ Philip có thể tham gia một cách tích cực vào chính trị của trung tâm Hy Lạp. Năm 356 TCN chứng kiến sự bùng nổ của Cuộc chiến tranh thần thánh mà đẩy Phocis chống lại Thebes và các đồng minh của nó. Thebes tuyển mộ người Macedonia để gia nhập cùng với họ. Và tại Trận cánh đồng Crocus, Philip có chiến thắng quyết định trước Phocis và đồng minh Athens của nó. Kết quả là Macedonia đã trở thành quốc gia lãnh đạo liên minh Amphictyonic và Phillip đã trở thành người đứng đầu đại hội Pythian, đặt nền móng vững chắc cho nhà lãnh đạo Macedonia tại trung tâm chính trị của thế giới Hy Lạp.


Trong khi đang tiếp tục xung đột với Athen, Philip hành quân về phía đông vượt qua Thrace, trong một nỗ lực để chiếm lấy Byzantium và Bosphoros, vì vậy đã cắt giảm nguồn cung cấp lương thực từ biển Đen cho Athen. Cuộc vây hãm Byzantium thất bại nhưng Athen đã nhận ra sự nguy hiểm về sự trỗi dậy của Macedonia và Demosthenes đã xây dựng một liên minh gồm nhiều thành bang lớn để chống lại người Macedonia. Quan trọng nhất là Thebes, nơi có lực lượng bộ binh mạnh nhất trong số các thành bang gia nhập. Liên minh này đã đụng động với quân đội Macedonia trong trận Chaeronea và đã nhận thất bại quyết định.

Con trai của Philippos, Alexandros đại đế (356-323 TCN), đã cố gắng để mở rộng quyền lực của vương quốc Macedonia không chỉ ở các thành bang Hy Lạp mà còn tới đế chế Ba Tư, Ai Cập, và các vùng đất xa về phía đông tới tận biên giới của Ấn Độ. Alexandros đã chấp nhận các tước hiệu của các quốc gia mà ông chinh phục đi kèm với sự lan truyền của nền văn hóa Hy Lạp thông qua đế chế rộng lớn của ông. Mặc dù đế chế đã tan vỡ thành nhiều quốc qia một thời gian ngắn sau khi ông qua đời, cuộc chinh phục của ông đã để lại một di sản lâu dài, ít nhất là ở các thành phố Hy lạp được thành lập ở Ba Tư, báo hiệu thời kỳ Hy Lạp hóa. Trong cuộc phân chia đế chế của Alexandros giữa các Diadochi, Macedonia rơi vào tay triều đại Antipatros, mà bị lật đổ bởi triều đại Antigonos chỉ sau một vài năm, năm 294 TCN
Chiến tranh với Romeưới thời Philippos V của Macedonia (221-179 TCN) và con trai ông Perseus của Macedonia (179-168 TCN), vương quốc đụng độ với thế lực đang lên là Cộng hoà La Mã. Trong thế kỷ thứ 2 và 1 trước Công nguyên, Macedonia đã tham gia một loạt các cuộc chiến tranh với Rome. Hai thất bại nặng nề nhất dẫn đến sự kết thúc của vương quốc là vào năm 197 TCN khi La Mã đánh bại Philippos V, và năm 168 TCN khi La Mã đánh bại Perseus. Thất bại toàn diện này dẫn đến kết thúc của Macedonia, sự biến mất triều đại Antigonid và sự tan rã vương quốc Macedonia. Andriscos thành công trong một thời gian ngắn khi tái lập chế độ quân chủ năm 149 trước Công nguyên nhưng đã nhanh chóng thất bại vào năm sau và La Mã tổ chức cai trị trực tiếp và biến Macedonia thành tỉnh Macedonia của La Mã .

Yamato

nhật bổn đây,
Vào cuối thế kỷ 6, sau khi giành thắng lợi trong một số cuộc phân tranh như vậy, Nhật hoàng Suiko, Thái tử Shōtoku và Soga no Umako đã xây dựng được một nền tảng chính trị vững chắc, thành lập hệ thống quan chức gồm 12 bậc và xây dựng Hiến pháp 17 điều. Qua đó, vương quyền được đổi mới đáng kể, hình thái chính trị gọi là vương quyền Yamato bị xóa bỏ, nhà nước Yamato cổ đại được thành lập.
chủ yếu là 1 nước nông nghiệp, trồng chọt và chăn nuôi, nông dân của Yamato rất chăm chỉ(nên đc nhà phát hành AOE + 30% tốc độ)
Quân đội thì chủ yếu là các Chiến Binh Samurai sử dụng cung và kiếm nhật ,rất đông, (nhà phát hành đã cho 2 loại C cung và C kiếm) này của Yamato rẻ hơn các quân khác

GREEK - Hi Lạp

Quân đội Hi Lạp thời bấy giờ chỉ toàn bộ binh hoplite

Đội hình hoplite phalanx từ thời Archaic và Cổ Đại ở Hy Lạp (khỏang 750 – 350 TCN) là một đội hình mà hoplite sẽ sắp xếp khăn khít trong hàng ngũ. Hoplite sẽ để sát khiên với nhau, và những hàng đầu trước hàng đầu tiên thì đưa giáo qua đầu hàng đầu tiên. Đội hình phalanx vì vậy đặc trưng cho một bức tường khiên và những cây giáo chĩa đồng lọat về phía quân thù, làm cho tấn công trước mặt trở nên khó hơn. Nó cũng cho phép nhiều người lính có thể tham gia chiến trận hơn tại một thời điểm xác định (khác với trường hợp chỉ những người hàng đầu tiên mới được tham gia)


Phalanx thường từ từ bước tới, dù họ vẫn có thể tăng tốc độ ở những yard cuối cùng. Herodotus của Hy Lạp nói rằng, ở Trận Marathon, “đó là những người lính Hy Lạp đầu tiên chúng ta biết xông tới đối thủ (charging) khi đang chạy”. Nhiều nhà sử học tin rằng cuộc cách mạng này chủ yếu là vì họ muốn giảm thiểu thương vong từ lính đánh xa Ba Tư. Hai phía có thể chạm nhau, nhiều cây giáo ở hàng đầu có thể rung lên. Trong trận đánh, toàn bộ đội hình sẽ từ từ ấn tới trước để cố đánh xuyên qua đội hình đối phương, vậy khi hai đội hình phalanx chạm nhau, sự run này có thể chủ yếu trở thành một cuộc chiến của sự đâm tới trước, vì vậy khi đó, luật là những phalanx có đội hình sâu hơn thường bao giờ cũng thắng, rất ít ngọai lệ được ghi nhận.


Cần phải biết rằng không có bức họa Hy Lạp nào mô tả bất cứ cái gì giống như một trận chiến đâm tới trước và lý thuyết này, rõ ràng là lý thuyết này là lý thuyết được công nhận rộng rãi nhất, nhưng lại là một sản phẩm của suy đóan dựa trên nghiên cứu hơn là dựa trên bằng chứng rõ ràng từ những nguồn đương thời. Thuật ngữ tiếng Hy Lạp “push” đã được sử dụng với một nghĩa ẩn dụ hòan tòan tương đồng với từ tiếng Anh (ví dụ như nó cũng dùng để tả một sự tiến triển của lập luận) và nó không thể được cho là “đẩy” tới quân thù một cách thông thường và mô tả một hiện tượng vật lý, cho dù có thể nó là như vậy.


Hoplite cá nhân thường cấm khiên bên tay trái (lực đâm ko mạnh bằngtay phải- điều này lý giải dame + 4 chứ ko phải +7 của Y Greek trong AOE), không chỉ bảo vệ một mình anh ta mà còn bảo vệ người lính bên phải. Điều này có nghĩa là, một vài người lính ở bên phải phalanx chỉ được bảo vệ một nửa. Trong chiến đấu, những lực lượng phalanx đối địch thường khai thác điểm này bằng cách tấn công lên cánh phải. Điều đó cũng có nghĩa, trong chiến đấu, một đội hình phalanx sẽ phải di chuyển từ từ sang bên phải(để hoplite còn đứng sau khiên che của người đồng đội bên cạnh). Những người lính hoplite kinh nghiệm nhất thường được xếp vào bên phải phalanx, để giải quyết những vấn đề này. Có một chỉ huy ở mỗi hàng phalanx, và một vị tướng hậu quân, là ouragos (nghĩa là chỉ huy đằng đuôi), sẽ giữ trật tự đằng sau. Vì vậy phalanx là một ví dụ của một đội hình quân sự mà mỗi một yếu tố cá thể trong trận đấu sẽ bảo vệ sự thành công cho tất cả còn lại. Hoplite phải tin vào những người lính kể cận và phải bảo vệ họ; và phải bảo vệ người lính bên cạnh mình; một đội hình phalanx, vì vậy, sẽ chỉ mạnh ngang với những thành tố yếu nhất(nghĩa là cả đội hình phalanx chỉ có sức mạnh ngang với những cá thể yếu nhất, đơn giản vì khi những cá thể yếu nhất này bị lọai trừ thì tất cả những cá thể mạnh hơn coi như vô dụng). Sức mạnh của một đội hình phalanx vì vậy phụ thuộc vào các hoplite đơn lẻ có giữ được đội hình trong chiến tranh không, và họ có thể giữ vững vị trí như thế nào, đặc biệt là khi chịu tấn công của một đội hình khác. Đội hình kỷ luật hơn và dũng cảm hơn sẽ có cơ may chiến thắng cao hơn – không kể nhiều khi sự va chạm của rất nhiều thành bang Hy Lạp được giải quyết đơn giản là một bên chạy khỏi chiến trường trước trận đánh. Từ Hy Lạp dynamis, “Ý chí tấn công”, miêu tả động lực giữ các hoplite trong đội hình. Do phải thay đổi đội hình liên tục nên phải di chuyển nhiều nên nhà sáng chế cho Hoplite của Greek đc + 30% tốc độ di chuyển.


Vũ trang cho Hoplite: Vũ khí quan trọng nhất là chiếc giáo khỏang 2.7 m gọi là doru. Mặc dù có nhiều ghi chép khác nhau về độ dài của nó, bây giờ thường người ta cho rằng nó khỏang 7 – 9 feet (~2.1 - ~2.7 m). Nó được cầm một tay, tay kia cầm khiên. Mũi giáo thường cong hình lá cây, cạnh giáo có một que nhọn gọi là sauroter, được dùng để cắm giáo trên mặt đất(cũng là lí do của tên gọi nó). Nó cũng dùng làm vũ khí thứ cấp nếu như mũi giáo bị cong, hoặc dùng cho những đơn vị bên cánh xử lý những kẻ thù đã gục ngã khi phalanx tiến tới. Hoplite dùng giáo dọc theo phía trên cánh tay hay phía dưới cánh tay vẫn là đề tài tranh cãi giữa các nhà sử học. Cầm dưới cánh tay thì yếu hơn nhưng dễ kiểm sóat hơn, và ngược lại. Có vẻ như cả hai cách đều được dùng, tùy tình huống. Nếu chỉ huy ra lệnh tấn công, thì cầm trên cánh tay có vẻ dễ xuyên phá phòng thủ đối phương hơn. Cú đâm hướng đi lên dễ bị giáp đối phương làm chệch hướng vì lực đòn bẩy yếu hơn. Dù vậy, khi phòng thủ, cầm giáo dưới cánh tay có vẻ gây sốc lớn hơn, nó có thể được đặt nằm dài dưới vai để tăng tính ổn định. Cũng có nguồn cho rằng động tác tấn công khi đặt giáo trên cánh tay sẽ cho ra một sự kết hợp hiệu quả hơn giữa chiếc aspis và doru khi bức tường khiên đã bị đánh đổ, còn động tác tấn công khi đặt giáo dưới cánh tay sẽ hiệu quả hơn khi những chiếc khiên được nối dài thành một hàng. Các hoplite đứng trong những hàng phía sau hàng đầu tiên thì gần như chắc chắn là dùng giáo trên cánh tay khi đang chiến đấu. Những hoplite này khi không chiến đấu sẽ cầm giáo dưới cánh tay và nâng giáo lên với góc nâng càng về sau càng tăng. Chiến thuật này cho một sự phòng thủ tốt khi bị những đơn vị đánh xa tấn công, khi nó làm chệch hướng sức mạnh này.


Hoplite cũng mang một đỏan kiếm gọi là xiphos. Đỏan kiếm này sử dụng như vũ khí thứ cấp, chỉ dùng khi hàng giáo bị xuyên thủng, hoặc phalanx bỏ đội hình. Khi đối phương bỏ chạy, hoplite sẽ thả khiên và giáo, sau đó đuổi theo đối phương bằng đỏan kiếm. Một bất lợi của xiphos là nó vô cùng nặng và không có tầm tấn công cao bằng phần lớn kiếm trong giai đọan đó.

Điểm yếuHoplite phalanx yếu nhất khi gặp những lực lượng trang bị nhẹ hơn và linh họat hơn nếu không có những lực lượng hỗ trợ như vậy. Ví dụ như trận Lechaeum, một lực lượng Athens lãnh đạo bởi Iphicrate đã đánh cho một Spartan mora (một đơn vị khỏang 500 – 900 bộ binh nặng)tan tành. Quân Athens có sự cân bằng đáng kể giữa lính đánh xa nhẹ với javelin(lao) hoặc nỏ đã đánh gục những đợt tấn công liên hồi của Sparta, tạo ra sự hỗn lọan trong hàng ngũ Sparta và dĩ nhiên đã bỏ chạy khi thấy bộ binh nặng Athens cứu viện và định tấn công vào sườn họ bằng thủy quân.

Phalanx Macedonia cũng có điểm yếu tương tự với các hoplite trước. Về lý thuyết thì nó không thể bị đánh bại trước mặt nhưng hai cánh thì rất yếu, khi đã dàn trận rồi thì rất khó để bỏ trận hoặc để dàn trận lại để bị tấn công từ những hướng đó. Vì vậy, phalanx gặp một đội hình không phải phalangite thì cần được bảo vệ hai bên cánh, quân trang bị nhẹ hơn hoặc ít ra cũng là cơ động hơn, kỵ binh chẳng hạn. Điều này thể hiện rõ ở trận Magnesia, khi mà bộ binh hỗ trợ của Seleucid đã bị tiêu diệt thì phalanx không còn cách nào chống lại được bộ binh La Mã.


Phalanx Macedonia cũng có thể mất sự khăng khít khi di chuyển qua những địa hình xấu, như vậy có thể tạo ra khỏang trống giữa các khối quân, và cũng không tạo được một tiền quân chắc chắn. Trong tình thế này, trận Pydna chẳng hạn, phalanx trở nên rất dễ tiêu diệt bởi những đơn vị cơ động hơn, các century legion La Mã chẳng hạn, có thể né được giáo và tiến tới dàn trận đánh xáp lá cà với phalangites.


Cuối cùng, phần lớn các đội quân giống-phalanx thường thiếu hỗ trợ của những tóan quân đằng sau tiền tuyến. Như vậy chỉ cần xuyên thủng tiền tuyến này hoặc tiêu diệt hai cánh quân thì bảo đảm thắng lợi.


Sumerian


Những người định cư ở vùng Lưỡng Hà vào khoảng 3500 trước Công nguyên,người chắc nịch,rất to khỏe, có mái tóc đen được gọi là các Sumeria (lý giải nông dân Summer 40 máu) . Các khu vực mà họ định cư tại được gọi là Sumer.

Nền văn minh Sumer là nền văn minh sớm nhất được biết đến trên trái đất. Lần đầu tiên, người Sumer biết kiểm soát môi trường sống của họ. Sumerians biết rằng họ đã kiểm soát con sông Tigris và Euphrates. Trong mùa xuân, các con sông bị ngập lụt, và khi họ rút đi, họ để lại con đê tự nhiên phía sau. Người Sumer xây dựng các con đê cao hơn và sử dụng chúng để giữ cho nước lũ. Trong mùa hè, khi đất khô, các Sumeians chọc lỗ hổng trong các con đê. Các nước sông chạy qua các lỗ và kênh thủy lợi trong đất. Sumer trồng các loại cây là: lúa mạch, lúa mì, vừng, cây lanh, cây ăn quả, lòng bàn tay ngày tháng, và các loại khác nhau rất nhiều các loại rau.
Sự màu mỡ của đất đai do phù sa từ hàng nghìn năm mang lại + họ rất biết cách chăm sóc những mảnh đất của mình.(chính vì thế ruộng của ng` Sumer đất đai dùng đc lâu bền - lý giải trong AOE farm của Sumer gấp đôi quân khác).

Quân sự


Ứng dụng quân sự đầu tiên của bánh xe được mô tả cho thấy các chiến binh đi trên một chiếc xe ngựa. Thật thú vị, người Sumer cũng phát minh ra hàng bánh, mà đã trở thành chiếc xe tiêu chuẩn vận chuyển hậu cần tại Trung Đông cho đến khi thời gian của Alexander Đại đế . Phát minh Sumer của ngạch xe ngựa trong số những sáng kiến quân sự lớn trong lịch sử. Các xe ngựa Sumer thường là một chiếc xe bốn bánh (mặc dù có những ví dụ của sự đa dạng hai bánh trong các hồ sơ khác) và bốn onagers để kéo nó. Sumer cũng được ghi nhận với phát minh ra chiếc vòng kiểm soát để sử dụng với các xe ngựa để cung cấp cho các trình điều khiển một số kiểm soát đối với các onagers. Ở giai đoạn đầu phát triển các xe ngựa có thể không phải là một vũ khí tấn công chính vì kích thước, trọng lượng của nó, và bất ổn. Trong tất cả các xác suất, nó đã không được sản xuất với số lượng. Sau đó, tuy nhiên, trong tay của các Hyksos, Hittite, Cannanites, Ai Cập, Assyria, các cỗ xe ngựa đã trở thành chiếc xe nổi bật chính của quân đội sau đồ đồng và sắt sớm. Cỗ xe ngựa của trình điều khiển, cung thủ, và spearmen(lính giáo) đã trở thành các quân đoàn chiến đấu ưu tú của thế giới cổ đại. Ở một số nước của khu vực này, truyền thống tiếp tục cho đến ngày nay. Nó không phải là ngẫu nhiên mà quân đội Israel đặt tên xe tăng đầu tiên của Merkava . Trong tiếng Do Thái, Merkava có nghĩa là xe ngựa.