A half adder is a device that can add two bits and returns the value, along with a carry value. The difference between a half adder and a full adder is that a half adder only accepts two bits, while a full adder adds two bits and a carry, so full adders are needed for ALU's.
The XOR Gate is responsible for finding the sum without worrying about a carry. XOR works here because if A and B are the same, then it will return 0, and if the values are different (one is a 1, one is a 0), then it will return a 1. The AND Gate is there to handle the carry. If both A and B are 1, the XOR gate will return 0, but the AND gate will differentiate if it is (0,0) or (1,1) and have a carry value if it is the latter.