abstract train