Abstract Codes