Así, se pueden diseñar los componentes asumiendo que se cumplirán ciertas condiciones de entrada (pre-condiciones), mientras que se deberán garantizar ciertas condiciones de salida (post-condiciones), así como la invariante de clase (propiedades que se mantienen invariantes a pesar del procesamiento realizado por el componente).