Las categorías se diferencian de los conjuntos en muchos aspectos. Una respuesta sería que los conjuntos son $0$ -y las categorías son $1$ -d. Para verlo, hay que tener en cuenta que un conjunto sólo tiene elementos que pueden considerarse entidades puntuales. Si hiciéramos un dibujo del conjunto $\{1,2,3,4\}$ dibujarías cuatro puntos y los marcarías en consecuencia. Si hicieras un dibujo del conjunto $\{dog, cat, alligator, piano\}$ , entonces volverás a dibujar cuatro puntos y los etiquetarás en consecuencia. En ese sentido los conjuntos son $0$ dimensional. Ahora bien, una categoría consiste en un conjunto (o una clase) de objetos, que de nuevo pueden considerarse entidades puntuales, pero también están los morfismos, o flechas. Una flecha, o morfismo, en una categoría puede dibujarse como una flecha que va de un objeto a otro. En este sentido, las categorías son $1$ -dimensional.
La analogía entre las clases en OOP y las categorías en matemáticas no es muy fuerte. Ciertamente, hay algunas cosas en común, pero no es una buena idea pensar que ambas nociones están muy relacionadas. En la programación orientada a objetos, una clase consta de datos y métodos. Los métodos utilizan y actúan sobre los datos. Cuando se define una categoría no existe tal división. Una categoría especifica los objetos y los morfismos, pero es incorrecto ver los objetos como datos y los morfismos como el uso o la acción sobre los datos. De hecho, es bien sabido que se puede prescindir completamente de los objetos, mientras que en una clase en OOP, los datos ciertamente no son redundantes. En una categoría, cada morfismo está ligado a un dominio y a un codominio. No actúa necesariamente sobre su dominio. De hecho, el dominio puede ser cualquier cosa, no necesariamente un conjunto, por lo que puede no haber nada sobre lo que actuar.
La confusión que menciona con $f:A\to B$ (o la notación que se utilice) no debería existir. En el contexto de las categorías, $f:A\to B$ siempre significa que $f$ es un morfismo en alguna categoría (entendida por el contexto) y el dominio de $f$ es $A$ mientras que el codominio es $B$ . Es posible que $A$ y $B$ son a su vez categorías, y $f$ es entonces también conocido como un functor. Esto está en consonancia con lo anterior, ya que hay una categoría de categorías y funtores.
La teoría de tipos no es lo mismo que la teoría de categorías. La teoría de tipos está mucho más relacionada con las clases en la programación orientada a objetos que las categorías. El paradigma de programación que es más categórico es la programación funcional, donde la teoría de tipos es también prominente. En la POO también se pueden adoptar ideas de programación funcional, y de hecho los funtores y las mónadas (que se pueden modelar en cualquier lenguaje de POO usando clases que se comportan de una determinada manera, y en la mayoría de los lenguajes funcionales se soportan directamente) están presentes en la programación.
En cuanto a los defectos de los decorados, no hay realmente ninguno, al menos ninguno que conozcamos. El protagonismo de los conjuntos en las matemáticas se debe simplemente a que proporciona un lenguaje muy cómodo y básico para hablar de prácticamente todas las matemáticas. Al fin y al cabo, ¿qué es más fundamental que un conjunto, un montón de cosas reunidas? Así, se puede esperar que cualquier cosa (casi) sea: un conjunto con.....