big change: rename ISegment-> SegmentInterface && add SegmentBase as the *segment's base class